oracle - 在Oracle 11g DBMS_SCHEDULER的repeat_interval中使用PL/SQL表达式

标签 oracle plsql dbms-scheduler

我正在尝试将 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/

相关文章:

sql - Oracle SQL : query to calculate percentage of non-null values for each column in a table

Oracle闪回,查询过去的数据

sql - 我应该在 Oracle Update 语句中使用 Too Many Rows Error 作为异常子句吗?

oracle - 调用另一个 Oracle 包中的过程/函数的开销

oracle - 如何使用 dbms_scheduler 安排工作在特定时间运行

oracle - 无法再次运行已完成的Oracle作业

不存在的 SQL

sql - 如何从 oracle 中选择 unicode 空白字符?

sql - 将 .sql 文件中的语句插入 Oracle 数据库,结果为 ORA-01704 : string literal too long