我正在尝试将 PL/SQL 表达式设置为我的作业的 REPEAT_INTERVAL - 不幸的是,它不起作用。
我想在这样的时间间隔内包含 CASE 表达式,例如,如何设置作业在一整分钟内开始的重复间隔,比如说 14:17:00,如果它在偶数分钟运行下次在 30 秒内运行,如果在奇数分钟运行,它将在下一分钟开始,因此其运行计划的一部分如下所示:
14:17:00
14:18:00
14:18:30
14:19:00
14:20:00
14:20:30
14:21:00
等等。我尝试过使用这些表达式:
trunc(sysdate, 'MI') + CASE WHEN mod(to_number(to_char(sysdate, 'MI')), 2)=0 then (1/24/60/2) else (1/24/60) end case
SYSTIMESTAMP + CASE WHEN mod(to_number(to_char(sysdate, 'MI')), 2)=0 then INTERVAL '30' SECOND else INTERVAL '60' SECOND end case
它们都可以在 SQL 查询中工作,但我无法编译 JOB。这样的 PL/SQL 表达式应该是什么样子?
或者,有没有办法让 JOB 在运行时计算其下一个运行日期?我还尝试在每次作业运行时修改开始日期,但没有成功 - 看起来该作业在第一次运行时仅使用一次开始日期,并且再也不会使用,即使日期更改为 future 的日期。
最佳答案
据我所知 the documentation ,如果您这样做,这应该是可能的
- 创建两个时间表;一个用于偶数分钟,一个用于奇数分钟
- 其中一个时间表包含另一个时间表
- 配置您的作业以使用组合时间表
文档中的示例:
BEGIN
dbms_scheduler.create_schedule('embed_sched', repeat_interval =>
'FREQ=YEARLY;BYDATE=0130,0220,0725');
dbms_scheduler.create_schedule('main_sched', repeat_interval =>
'FREQ=MONTHLY;INTERVAL=2;BYMONTHDAY=15;BYHOUR=9,17;INCLUDE=embed_sched');
END;
关于oracle - 在Oracle 11g DBMS_SCHEDULER的repeat_interval中使用PL/SQL表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21931794/