修改DBMS_SCHEDULER作业以在特定小时和分钟之间停止运行

时间:2018-02-06 07:48:28

标签: sql oracle dbms-scheduler

我需要在下午23:00到晚上19:45之间改变工作。我已经尝试了以下实现这一点,但下面的问题是作业将始终停止每小时15分钟,例如10:45至11:00等。我不确定我是否可以修改以下解决这个问题。

# noinspection 801,PyShadowingNames
def mytest(x_config):
    print(x_config)

1 个答案:

答案 0 :(得分:1)

创建两个计划并将它们组合在一起:

exec DBMS_SCHEDULER.CREATE_SCHEDULE('JOB_PERIOD_1', 
   repeat_interval => 'FREQ=SECONDLY;INTERVAL=5;BYHOUR=23,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18');

exec DBMS_SCHEDULER.CREATE_SCHEDULE('JOB_PERIOD_2', 
   repeat_interval => 'FREQ=SECONDLY;INTERVAL=5;BYHOUR=19;BYMINUTE=0,1,2,3,4,5,[...],43,44');


BEGIN
   DBMS_SCHEDULER.SET_ATTRIBUTE (
      name => 'MY_TEST_JOB',
      attribute => 'repeat_interval',
      value => 'JOB_PERIOD_1,JOB_PERIOD_2'
   );
END;

实际上我只用这个PL / SQL块测试了它。

DECLARE
   next_run_date TIMESTAMP := TIMESTAMP '2018-02-06 19:44:00';
   res INTEGER := 0;
BEGIN
    FOR i IN 1..30 LOOP
        DBMS_SCHEDULER.EVALUATE_CALENDAR_STRING('JOB_PERIOD_1,JOB_PERIOD_2', NULL, next_run_date, next_run_date);
        DBMS_OUTPUT.PUT_LINE(next_run_date);
    END LOOP;
END;