我试图将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在运行时计算下一个运行日期?我还尝试在每次作业运行时修改开始日期,但没有成功 - 看起来作业在第一次运行时仅使用开始日期一次,而且从未再次使用,即使日期在未来日期更改 .
2 回答
据我所知,the documentation,如果你这样做,这应该是可能的
创建两个时间表;一分钟,一分钟,奇数分钟
其中一个时间表包括另一个
配置您的作业以使用组合计划
文档中的示例:
我猜它有点迟到的答案,但比以后更好 . 你可以在重复间隔内使用plssql函数:
测试时间:11.2.0.3.0
让我们创造功能 . my_schedules.odd_even如果当前分钟为偶数则返回current_date 30秒,如果当前分钟为奇数则返回1分钟:
使用repeat_interval = my_schedules.odd_even创建作业并启用作业:
我们暂时检查一下结果:
Oracle Database Online Documentation 11g第1版(11.1)/数据库管理/使用计划:here