Запланируйте задание на определенные даты с помощью DBMS_JOB

У меня есть задание, созданное с помощью DBMS_JOB, которое запускается ежедневно в 1:00.

    WHAT        PROC_XYZ();
    NEXT_DATE   16-OCT-13
    NEXT_SEC    01:00:00
    INTERVAL    trunc(sysdate)+1+1/24

Я хочу изменить его для запуска в определенные даты (без шаблона или фиксированного интервала), например: 30 октября 2013 г., 14 ноября 2013 г., 18 ноября 2013 г.

Есть ли способ указать список дат для запуска задания?


person Stu    schedule 15.10.2013    source источник


Ответы (1)


No.

НО, вы можете создать список дат, в которые вы хотите запустить задание, и проверить, является ли текущая дата одной из этих дат, прежде чем выполнять процедуру. RETURNоператор вернет управление вызывающему код, как только он выполняется в процедуре.

Итак, добавьте что-то вроде этого в первую исполняемую строку вашей процедуры:

if trunc(sysdate) not in (date '2013-10-30', date '2013-11-14') then
   return;
end if;

Я бы, вероятно, использовал таблицу, а не список дат, чтобы ее было легко изменить без изменения кода. Если вы запускаете задание каждый день, оно немедленно завершится во все дни, кроме тех, которые вы хотите, чтобы оно выполнялось полностью.

Стоит прочитать примечание вверху DBMS_JOB документы:

Пакет DBMS_JOB заменен пакетом DBMS_SCHEDULER. В частности, если вы администрируете задания для управления загрузкой системы, вам следует рассмотреть возможность отключения DBMS_JOB путем отзыва прав на выполнение пакетов для пользователей.

person Ben    schedule 15.10.2013