Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как выйти из цикла / 7 сообщений из 7, страница 1 из 1
28.07.2016, 17:31:53
    #39282106
Баналитик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выйти из цикла
Привет, знатокам!

Кто-нибудь знает как выйти из цикла, если этот цикл выполняется более минуты?

Например, нужно определить функцию, которая работает слишком долго при определенных входных параметрах.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
DECLARE
  l_value NUMBER;
  l_start TIMESTAMP;
BEGIN
  FOR i IN
  (SELECT SID FROM v$session
  )
  LOOP
    l_start := SYSTIMESTAMP
    SELECT some_package.some_function(some_param) INTO l_value FROM dual;  --проверяем функцию some_package.some_function
    EXIT
  WHEN TRUNC (extract (second FROM (L_start -SYSTIMESTAMP))) > 60;
    dbms_output.put_line('Печатаем, при каких параметрах висит : '|| i.SID ||' - сильно висит');
  END LOOP;
END;



Пробовал использовать EXIT WHEN, но у меня так не получилось. Видимо, EXIT WHEN работает не так, как я думаю.
Также смотрел в сторону DBMS_PROFILER, но этот вариант не совсем подходит потому, что нужно дожидаться завершения цикла, а это неприемлемо, т.к. функция может работать часами-сутками.

Есть какие-нибудь идеи??

P.S. исправлять саму функцию пока не предлагать.
...
Рейтинг: 0 / 0
28.07.2016, 17:41:38
    #39282111
ora601
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выйти из цикла
БаналитикЕсть какие-нибудь идеи??


SYSTIMESTAMP - l_start ?
...
Рейтинг: 0 / 0
28.07.2016, 17:51:34
    #39282121
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выйти из цикла
ora601БаналитикЕсть какие-нибудь идеи??


SYSTIMESTAMP - l_start ?не поможет.
...
Рейтинг: 0 / 0
28.07.2016, 18:58:12
    #39282162
Egoр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выйти из цикла
Баналитик,

запускайте функцию в параллельной сессии и мониторьте ее выполнение.
...
Рейтинг: 0 / 0
29.07.2016, 10:21:42
    #39282468
Баналитик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выйти из цикла
EgoрБаналитик,

запускайте функцию в параллельной сессии и мониторьте ее выполнение.

Можно немного подробнее: у меня, к примеру, будет 100.000 разных параметров для функции - мне нужно сделать 100.000+1 сессий? Как запустить их все сразу?
...
Рейтинг: 0 / 0
29.07.2016, 11:56:25
    #39282598
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выйти из цикла
Баналитик,

Тебе следует открыть для себя самые азы программирования и дебаггинг в часности.
Оракл и PL/SQL здесь ни при чем.
Более того, Оракл предоставляет средства которых нет в подавляющем большинстве языков:
если что-то висит, то можно посмотреть что именно выполняется и на что уходит время.
...
Рейтинг: 0 / 0
29.07.2016, 12:19:46
    #39282627
--Eugene--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выйти из цикла
БаналитикПробовал использовать EXIT WHEN, но у меня так не получилось. Видимо, EXIT WHEN работает не так, как я думаю.а как, вы думаете, оно работает?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
SANDBOX@ee>;create or replace procedure longrunning_proc
  2  as
  3     t0 constant timestamp with time zone := current_timestamp;
  4     i constant interval day to second := interval '2' second;
  5  begin
  6     while t0 + i > current_timestamp loop
  7             dbms_lock.sleep(1/3);
  8             dbms_output.put_line(current_timestamp);
  9     end loop;
 10  end;
 11  /

Procedure created.

Elapsed: 00:00:00.00
SANDBOX@ee>;call longrunning_proc();
29-JUL-16 12.15.43.022000000 PM +03:00
29-JUL-16 12.15.43.352000000 PM +03:00
29-JUL-16 12.15.43.682000000 PM +03:00
29-JUL-16 12.15.44.022000000 PM +03:00
29-JUL-16 12.15.44.352000000 PM +03:00
29-JUL-16 12.15.44.692000000 PM +03:00

Call completed.

Elapsed: 00:00:02.02
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как выйти из цикла / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]