【问题标题】:Create scheduler job to run once in an year创建调度程序作业以每年运行一次
【发布时间】:2013-11-09 15:47:39
【问题描述】:

我想创建一个每年在2am on the first Sunday in October 上运行的作业,我尝试使用以下代码。但是得到了这样的错误,

Error report:
ORA-27419: unable to determine valid execution date from repeat interval
ORA-06512: at "SYS.DBMS_ISCHED", line 124
ORA-06512: at "SYS.DBMS_SCHEDULER", line 271
ORA-06512: at line 2

这是创建作业的代码

BEGIN
DBMS_SCHEDULER.CREATE_JOB(job_name        => 'To_DST_Australia',
                          job_type        => 'PLSQL_BLOCK',
                          JOB_ACTION      => 'BEGIN
                                                NULL;
                                              END;',
                          start_date      => SYSTIMESTAMP,
                          repeat_interval => 'FREQ=YEARLY; BYMONTH=OCT; BYDAY=1SUN; BYHOUR=2; BYMINUTE=00; BYSECOND=00',
                          end_date        => NULL,
                          enabled         => TRUE,
                          comments        => '1st Sunday in October');
END; 
/

提前致谢。

【问题讨论】:

  • 更改 FREQ=MONTHLY 而不是 YEARLY 执行得很好。尽管如此,在YEARLY 的情况下,仍不确定失败的原因。如果我们使用YEARLY 指定BYDAY=SUN 工作正常。
  • Oracle docs on BYDAY: “使用数字,如果使用 YEARLY 频率,您可以指定一年中的第 26 个星期五,或者使用 MONTHLY 频率指定每月的第 4 个星期四。” docs.oracle.com/cd/E16655_01/appdev.121/e17602/…
  • 一年中的第一个星期日不在十月,所以 YEARLY 表达式不匹配任何日期(因为您规定它应该尝试查找一年中的第一个星期日,但它必须在 10 月)。

标签: oracle oracle11g dbms-scheduler dbms-job


【解决方案1】:

使用每月频率:

DECLARE
 start_date        TIMESTAMP;
 return_date_after TIMESTAMP;
 next_run_date     TIMESTAMP;
BEGIN
  start_date := TO_TIMESTAMP_TZ('01-JAN-2013 00:00:00','DD-MON-YYYY HH24:MI:SS');

  return_date_after := start_date;
  FOR i IN 1..5
  LOOP
    dbms_scheduler.evaluate_calendar_string(
    'FREQ=MONTHLY; BYMONTH=OCT; BYDAY=1SUN; BYHOUR=2',
    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;
/

next_run_date: 06/OCT/13 02:00:00.000000 AM
next_run_date: 05/OCT/14 02:00:00.000000 AM
next_run_date: 04/OCT/15 02:00:00.000000 AM
next_run_date: 02/OCT/16 02:00:00.000000 AM
next_run_date: 01/OCT/17 02:00:00.000000 AM

【讨论】:

  • 太好了。非常感谢..!! :)
猜你喜欢
  • 2015-10-19
  • 2020-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多