我认为这是不可能的:
以下是一些 repeat_interval 示例,展示了日历语法的多功能性和灵活性:
周一至周五每天晚上 10:00 运行:
FREQ=DAILY; BYDAY=MON,TUE,WED,THU,FRI; BYHOUR=22; BYMINUTE=0; BYSECOND=0;
每小时运行一次:
FREQ=HOURLY;INTERVAL=1;
每 5 分钟运行一次:
FREQ=MINUTELY;INTERVAL=5;
每周五上午 9:00 运行(所有三个示例都是等效的):
FREQ=DAILY; BYDAY=FRI; BYHOUR=9; BYMINUTE=0; BYSECOND=0;
FREQ=WEEKLY; BYDAY=FRI; BYHOUR=9; BYMINUTE=0; BYSECOND=0;
FREQ=YEARLY; BYDAY=FRI; BYHOUR=9; BYMINUTE=0; BYSECOND=0;
每隔一个星期五跑一次:
FREQ=WEEKLY; INTERVAL=2; BYDAY=FRI;
每年第 5、10 和 15 周的星期一运行:
FREQ=YEARLY; BYWEEKNO=5,10,15; BYDAY=MON
在每个月的最后一天运行。
FREQ=MONTHLY; BYMONTHDAY=-1;
在每个月的倒数第二天运行:
FREQ=MONTHLY; BYMONTHDAY=-2;
在 3 月 10 日运行(两个示例是等效的):
FREQ=YEARLY; BYMONTH=MAR; BYMONTHDAY=10;
FREQ=YEARLY; BYDATE=0310;
每年 1 月 10 日、11 日、12 日、13 日和 14 日运行(两个示例是等效的):
FREQ=YEARLY; BYDATE=0110,0111,0112,0113,0114
FREQ=YEARLY; BYDATE=0110+SPAN:5D;
每 10 天运行一次:
FREQ=DAILY; INTERVAL=10;
每天下午 4:15、5:15 和 6:15 运行:
FREQ=DAILY; BYHOUR=16,17,18; BYMINUTE=15; BYSECOND=0;
每隔一个月的第 15 天运行:
FREQ=MONTHLY; INTERVAL=2; BYMONTHDAY=15;
每月 29 日运行:
FREQ=MONTHLY; BYMONTHDAY=29;
每个月的第二个星期三运行:
FREQ=MONTHLY; BYDAY=2WED;
在一年中的最后一个星期五运行:
FREQ=YEARLY; BYDAY=-1FRI;
每 50 小时运行一次:
FREQ=HOURLY; INTERVAL=50;
每隔一个月的最后一天运行:
FREQ=MONTHLY; INTERVAL=2; BYMONTHDAY=-1;
每个月的前三天每小时运行一次:
FREQ=HOURLY; BYMONTHDAY=1,2,3;
在一年中的第 60 天、第 120 天和第 180 天运行:
FREQ=YEARLY; BYYEARDAY=60,120,180;
在每个月的最后一个工作日运行(假设工作日是周一到周五):
FREQ=MONTHLY; BYDAY=MON,TUE,WED,THU,FRI; BYSETPOS=-1
以下是一些更复杂的示例,它们引用了以下命名的时间表:
BEGIN
sys.DBMS_SCHEDULER.create_schedule (
schedule_name => 'COMPANY_HOLIDAYS',
repeat_interval => 'FREQ=YEARLY; BYDATE=0704,0905,1124,1125,1225;');
sys.DBMS_SCHEDULER.create_schedule (
schedule_name => 'JUL4',
repeat_interval => 'FREQ=YEARLY; BYMONTH=JUL; BYMONTHDAY=4;');
sys.DBMS_SCHEDULER.create_schedule (
schedule_name => 'MEM',
repeat_interval => 'FREQ=YEARLY; BYMONTH=MAY; BYMONTHDAY=30;');
sys.DBMS_SCHEDULER.create_schedule (
schedule_name => 'LAB',
repeat_interval => 'FREQ=YEARLY; BYMONTH=SEP; BYMONTHDAY=5;');
sys.DBMS_SCHEDULER.create_schedule (
schedule_name => 'LAST_SAT',
repeat_interval => 'FREQ=MONTHLY; BYDAY=SAT; BYSETPOS=-1;');
sys.DBMS_SCHEDULER.create_schedule (
schedule_name => 'END_QTR',
repeat_interval => 'FREQ=YEARLY; BYDATE=0331,0630,0930,1231;');
sys.DBMS_SCHEDULER.create_schedule (
schedule_name => 'FISCAL_YEAR',
repeat_interval => 'FREQ=YEARLY;BYDATE=0301,0601,0901,1201;PERIODS=4;');
END;
/
在每个月的最后一个工作日运行,不包括公司假期:
频率=每月; BYDAY=周一、周二、周三、周四、周五;排除=公司_假期; BYSETPOS=-1
每周五中午和公司假期运行:
频率=每年; BYDAY=FRI;BYHOUR=12; INCLUDE=COMPANY_HOLIDAYS
在这三个假期运行:7 月 4 日、阵亡将士纪念日和劳动节:
JUL4,MEM,实验室
在每个月的最后一天(星期六或季度的最后一天)运行:
FREQ=MONTHLY; BYMONTHDAY=-1; INTERSECT=LAST_SAT,END_QTR
在财政年度每个季度的最后一个星期三运行:
FREQ=FISCAL_YEAR;BYDAY=-1WED
在财政年度第 2 和第 4 季度的最后一个工作日运行(假设工作日为周一至周五):
FREQ=FISCAL_YEAR;BYDAY=MON,TUE,WED,THU,FRI;BYPERIOD=2,4;BYSETPOS=-1