使用DBMS_JOB在特定日期安排作业

时间:2013-10-15 17:26:32

标签: oracle oracle10g dbms-job

我有工作,使用DBMS_JOB创建,每天凌晨1点运行

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

我想将其更改为在特定日期(没有模式或固定间隔)运行,例如:2013年10月30日,2013年11月14日,2013年11月18日

有没有办法可以指定要运行的作业的日期列表?

1 个答案:

答案 0 :(得分:2)

没有

但是,您可以创建希望作业运行的日期列表,并在执行该过程之前检查当前日期是否为其中一个日期。只要在程序中执行,RETURN statement就会将控制权返回给调用代码。

因此,在程序的第一个执行行中添加类似的内容:

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。