Создание задания в Oracle с использованием DBMS_JOB

Я пытаюсь создать работу, которая будет выполнять определенную процедуру каждое Рождество. Вот как далеко я получил:

<code>declare
   jobno number;
begin
   dbms_job.submit( jobno,
                   'BEGIN GiveCoins; END;',
                    to_date('12/25', 'MM/DD'),
                    'sysdate + ?');
end;
/
</code>

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

 Allan10 мая 2012 г., 19:43
@gdoron:DBMS_JOB.REMOVE
 gdoron10 мая 2012 г., 19:40
@Allan. Спасибо за чаевые. (Теперь я понимаю, почему я получил ошибку, когда пытался сделать это давным-давно ... {два дня назад}) И как вы удаляете работу?
 gdoron10 мая 2012 г., 18:30
Не можете ли вы добавить его вALL_JOBS Таблица?
 Allan10 мая 2012 г., 23:11
@gdoron: Вы не меняете его, потому что оно является частью словаря данных. По словам Oracle, «изменение или манипулирование данными в таблицах словаря данных может навсегда и пагубно повлиять на работу базы данных». Наиболее очевидным последствием будет то, что вы почти наверняка лишите весь экземпляр права на получение поддержки Oracle. Кроме того, я не знаю, что произойдет, и у меня нет особой мотивации это выяснять.
 Allan10 мая 2012 г., 19:38
@gdoron: Вы можете это сделать, если у вас есть роль sysdba, но вы не должны этого делать. Вы никогда не должны напрямую изменять системный каталог.

Ответы на вопрос(1)

Решение Вопроса

Вы хотите что-то вроде

declare
   jobno number;
begin
   dbms_job.submit( jobno,
                   'BEGIN GiveCoins; END;',
                    to_date('12/25/2012', 'MM/DD/YYYY'),
                    'add_months(trunc(sysdate),12)');
end;
/

Это будет выполнено впервые в полночь на Рождество 2012 года и каждые 12 месяцев после этого.

Ваш ответ на вопрос