powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как выйти из цикла
7 сообщений из 7, страница 1 из 1
Как выйти из цикла
    #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
Как выйти из цикла
    #39282111
ora601
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БаналитикЕсть какие-нибудь идеи??


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


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

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

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

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

Тебе следует открыть для себя самые азы программирования и дебаггинг в часности.
Оракл и PL/SQL здесь ни при чем.
Более того, Оракл предоставляет средства которых нет в подавляющем большинстве языков:
если что-то висит, то можно посмотреть что именно выполняется и на что уходит время.
...
Рейтинг: 0 / 0
Как выйти из цикла
    #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
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как выйти из цикла
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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