Применение пакета DBMS_JOB

1. Запуск на параллельное выполнение нескольких объёмистых задач
2. Если в конце процедуры есть какой-то объём работы,ненужный для пользователя (удаление объёмистой временной таблицы например), то можно его послать на немедленное выполнение в виде отдельной процедуры и управление в форме вернётся к пользователю раньше.
3. Периодический запуск заданий.

-- постановка задачи на выполнение
-- v_job_num - переменная, в которую запишется сгенерированный номер задания
-- ubc.a - запускаемая в задаче процедура (в конце её нужно обязательно ставить COMMIT; )
-- 3-й параметр - дата старта задания (можно через SYSDATE + N ), если NULL, то сниматься с задания не будет
-- 4-й параметр - интервал запуска (в примере - через каждые 10 дней), или напр. 'next_day(trunc(sysdate),''FRIDAY'')+12'
-- т.е. каждую пятницу в полдень
-- если NULL, то после первого выполнения задание снимется полностью

DECLARE
v_job_num number;
BEGIN
dbms_job.SUBMIT(v_job_num ,'ubc.a;',to_date('01.01.2003','dd.mm.yyyy'),'sysdate +10');
DBMS_OUTPUT.PUT_LINE(v_job_num);
end;

-- немедленное разовое выполнение задания
-- 14 - присвоенный номер задания
BEGIN
dbms_job.run(14);
end;

-- удаление задания
BEGIN
dbms_job.remove(14);
end;
Хостинг от uCoz