Я пытаюсь запустить 4 разные процедуры в одной 'основной' процедуре, используя while loop . Мне нужен этот цикл while для работы в течение 5 минут (Условие).
Мой основной код процедуры:
PROCEDURE P_TEMP_MAIN IS
-- Declare Variables
l_start NUMBER;
v_loop_window DATE;
v_purge_year NUMBER(4);
v_increment_limit NUMBER(10):= 100000; -- LIMIT INCREMENT to be set
v_counter NUMBER:= 0;
BEGIN
l_start := DBMS_UTILITY.get_time;
v_purge_year := F_TEMP_GET_YEAR();
SELECT sysdate + interval '5' minute INTO v_loop_window from dual; -- Set the TIME INTERVAL for the purging activity
WHILE (SYSDATE <= v_loop_window) LOOP
P_TEMP_CHECK_MIN(v_purge_year);
-- TO-DO: Check year before purging.
P_TEMP_PURGE(F_TEMP_GET_MIN(v_purge_year),F_TEMP_GET_MAX(v_purge_year,v_increment_limit),v_increment_limit);
P_TEMP_UPDATE_MIN(v_purge_year,v_increment_limit);
v_counter := v_counter + 1;
END LOOP;
-- TO-DO: Include Output Logs. (Ex: Mails and output data like Rows updated and time taken)
DBMS_OUTPUT.PUT_LINE('LOOP count = ' ||
(v_counter));
DBMS_OUTPUT.PUT_LINE('Time taken = ' ||
(DBMS_UTILITY.get_time - l_start));
END P_TEMP_MAIN;
Вывод:
SQL> execute P_TEMP_MAIN;
LOOP count = 804361
Time taken = 30049
PL/SQL procedure successfully completed
ПРИМЕЧАНИЕ : Процедура P_TEMP_PURGE
занимает 2 минуты для запуска каждый раз.
Вопрос : Почему WHILE LOOP Цикл без ожидания завершения внутренних процедур?