暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle调度程序日历表达式可自定义星期五时间

ASKTOM 2020-09-03
620

问题描述

有没有办法将以下内容表示为oneOracle日历表达式?
参考:https://docs.oracle.com/cd/B28359_01/server.111/b28310/scheduse004.htm#ADMIN12415

Mon-Thurs hourly except 5PM and 8PM, Fri 12AM-4PM

(目前我有两个单独的日历字符串:
FREQ=HOURLY;BYHOUR=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19,21,22,23;BYMINUTE=11,26,41,56;BYDAY=MON,TUE,WED,THU;
FREQ=HOURLY;BYHOUR=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16;BYMINUTE=11,26,41,56;BYDAY=FRI;
复制

)

如果可能的话,希望合并成一个表达式。提前谢谢!


专家解答

我认为不可能使用单个 “FREQ”,但这并不意味着您在这里没有很多选择

1) 重复功能

重复间隔可以是一个plsql函数,该函数在下次应运行时返回,例如

SQL> create table t ( x date );

Table created.

SQL>
SQL> create or replace function my_special_interval return date is
  2  begin
  3    return sysdate + 30/86400;
  4  end;
  5  /

Function created.

SQL>
SQL> begin
  2      dbms_scheduler.create_job (
  3         job_name           =>  'MY_JOB',
  4         job_type           =>  'PLSQL_BLOCK',
  5         job_action         =>  'begin insert into t values (sysdate); commit; end;',
  6         start_date         =>  sysdate,
  7         repeat_interval    =>  'my_special_interval',
  8         enabled            =>  true);
  9  end;
 10  /

PL/SQL procedure successfully completed.

SQL> select * from t;

X
-------------------
04/09/2020 14:15:39

SQL> /

X
-------------------
04/09/2020 14:15:39
04/09/2020 14:16:09
复制



2) 合并时间表

您可以按照上面的定义创建2个计划,然后使用INCLUDE子句创建一个将两者结合在一起的计划

3) 超集加PLSQL

我看到的一件常见的事情是人们创建一个时间表,该时间表是两者的超集,然后更改作业文本,即

job_action =>q'{my_proc;}'

变成

job_action =>q' {如果to_char(sysdate,'D') = 1和 .... 那么我的 _ proc; 如果;}'结束

因此,他们拥有PLSQL的全部灵活性,可以准确控制他们希望作业在什么条件下运行。/

文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论