Oracle Scheduler - 重复间隔2个不同的日期和时间

时间:2017-04-27 06:47:38

标签: oracle scheduler frequency jobs repeat

是否可以在一个工作中创建2个不同日期和时间的重复间隔作业? 例如,每个MON在02:00:AM,每个FRI在03:00 PM。

repeat_interval      =>  'FREQ=DAILY;BYDAY=MON;
                          byhour=02; byminute=00; bysecond=00',

repeat_interval      =>  'FREQ=DAILY;BYDAY=FRI;
                          byhour=15; byminute=00; bysecond=00',

这些频率,但在一个作业repeat_interval中一起。

由于

1 个答案:

答案 0 :(得分:1)

为其中一个间隔创建一个命名的时间表,并使用INCLUDE,如

编辑版: 由于INCLUDE不支持byminute, byhour。等,我改变了这个,我做了什么,将第一份工作描述为每天,每周五开火,但添加了一个开始时间戳,并指出一时间所以它在每个星期五的那个时候重复,而不是把它包括在第二份工作中。

declare
   ts timestamp := to_timestamp_tz('28/04/2017 09:00:00',
                                   'DD/MM/YYYY HH24:MI:SS');
begin

   dbms_scheduler.create_schedule('FRIDAY_SCHED', start_date => ts,
                                  repeat_interval => 'FREQ=DAILY;BYDAY=FRI;');
   dbms_scheduler.create_schedule('ALL_SCHED',
                                  repeat_interval => 'FREQ=DAILY;BYDAY=MON; byhour=02; byminute=00; bysecond=00;INCLUDE=FRIDAY_SCHED');
end;

你可以用这种方式测试时期

declare
   start_date timestamp;
   return_date_after timestamp;
   next_run_date timestamp;
begin
   start_date := to_timestamp_tz('28/04/2017 09:00:00',
                                   'DD/MM/YYYY HH24:MI:SS');
   return_date_after := start_date;
   for i in 1 .. 5 loop
      DBMS_SCHEDULER.EVALUATE_CALENDAR_STRING('FREQ=DAILY;BYDAY=FRI;',
                                              start_date, return_date_after,
                                              next_run_date);
      DBMS_OUTPUT.PUT_LINE('next_run_date: ' || next_run_date);
      return_date_after := next_run_date;
   end loop;
end;