在Oracle计划程序中为每周计划使用excluse选项

在Oracle计划程序中为每周计划使用excluse选项,oracle,oracle11g,scheduler,Oracle,Oracle11g,Scheduler,我们已将计划程序配置为每周在evert monday运行,但作为一项要求,我们希望在特定的月份日期跳过此计划程序。比如我不想在2015年5月15日、2015年6月16日等时间运行这个 BEGIN DBMS_SCHEDULER.set_attribute( name => '"SCHEMA"."NAME"', attribute => 'repeat_interval', value => 'FREQ=WEEKLY;BYDAY=MON;BYHOUR=13;BYMINUTE=0;B

我们已将计划程序配置为每周在evert monday运行,但作为一项要求,我们希望在特定的月份日期跳过此计划程序。比如我不想在2015年5月15日、2015年6月16日等时间运行这个

BEGIN
DBMS_SCHEDULER.set_attribute( name => '"SCHEMA"."NAME"', attribute => 'repeat_interval', value => 'FREQ=WEEKLY;BYDAY=MON;BYHOUR=13;BYMINUTE=0;BYSECOND=0');
END; 
/
我已经检查了调度程序参数,可以看到使用EXCLUSE参数我们可以做到这一点,但每次我尝试它时都会给我编译错误


请有人帮忙。

您必须先为排除的天数定义另一个时间表。如果它们之间没有真正的重复模式,则必须为每个排除的日期定义一个时间表。大概是这样的:

BEGIN

    -- define a schedule for May 15th
    DBMS_SCHEDULER.CREATE_SCHEDULE (
        repeat_interval  => 'FREQ=YEARLY;BYDATE=0515',     
        comments         => 'Exclude May 15th',
        schedule_name    => '"May15th"'
    ); 

    -- define a schedule for June 16th
    DBMS_SCHEDULER.CREATE_SCHEDULE (
        repeat_interval  => 'FREQ=YEARLY;BYDATE=0616',     
        comments         => 'Exclude June 16th',
        schedule_name    => '"June16th"'
    );

    -- note the EXCLUDE in the value parameter
    DBMS_SCHEDULER.set_attribute( 
        name => '"SCHEMA"."NAME"', 
        attribute => 'repeat_interval', 
        value => 'FREQ=WEEKLY;BYDAY=MON;BYHOUR=13;BYMINUTE=0;BYSECOND=0;EXCLUDE=May15th,Jun16th;'
    );
END;

谢谢你的帮助。我们可以把所有这些排除在外的日期作为一个时间表的一部分吗。在我的情况下,我们有15个这样的日期,我们不必有15个时间表。请告知。如果15天之间存在任何重复关系(例如,每30天发生一次,或一个月的第一个星期六发生一次),您可以为所有这15天定义一个单独的时间表,并设置适当的重复间隔。如果日期是“随机的”,那么您必须定义15个计划:(不幸的是,没有更简单的方法。我能想到的唯一替代方法是在计划程序正在执行的进程上移动此逻辑。例如,如果计划程序执行一个过程,您可以在该过程中检查sysdate是否在预定义日期列表中(您可以将它们存储在查找表中)并仅在sysdate不是排除的日期时执行包的其余部分。这对我不起作用。继续给出此错误。ORA-27412:重复间隔或日历包含无效标识符:“SOA_SOAINFRA”。“五月十五日”ORA-06512:在“SYS.DBMS_ISCHED”处,第4478行ORA-06512:在“SYS.DBMS_调度器”处,第2862行您可以这样组合计划:
DBMS\u调度器。创建计划(“ScheduleExcludes”,repeat\u interval=>“FREQ=Year;INTERSECT=May15,Jun16”);
对于评估,您也可以使用以下过程: