ITPub博客

首页 > Linux操作系统 > Linux操作系统 > itpub论坛回复:让一个JOB每天执行俩次

itpub论坛回复:让一个JOB每天执行俩次

原创 Linux操作系统 作者:oldwain 时间:2019-06-14 10:39:07 0 删除 编辑

问题: 来源(winrar )

怎么让一个JOB每天执行俩次?
如每天中午12:00,下午5:30执行

我的回答:


方法1:

job每半小时执行一次调用外层procedure, 由外层procedure判断时间决定是否执行原来的procedure.

<<>

begin
dbms_job.submit(job => :job,
what => 'pshell;',
next_date => sysdate,
interval => 'sysdate+30/60/24';
commit;
end;

create procedure pshell as
begin
if to_char(sysdate, 'hh24:mi") > '12:00' and to_char(sysdate, 'hh24:mi") < '12:30' then
p;
end if;
if to_char(sysdate, 'hh24:mi") > '17:30' and to_char(sysdate, 'hh24:mi") < '18:00' then
p;
end if;
end;

方法2:

用复杂的表达式来实现, 比如给job指定interval:

begin
dbms_job.submit(job => :job,
what => 'p;',
next_date => sysdate,
interval => 'decode(sign(sysdate-trunc(sysdate,''DD'')-12/24),-1,trunc(sysdate,''DD'')+12/24,decode(sign(sysdate-trunc(sysdate,''DD'')-17/24),-1,trunc(sysdate,''DD'')+17.5/24,trunc(sysdate,''DD'')+1+12/24))');
commit;
end;
/
这样看上去是简便了, 可是太晦涩, 不容易维护。

另外,interval参数的最大长度似乎只有200个字符(?), 如果再复杂一点,恐怕就没办法用这种办法来实现。

方法1看似复杂, 但提供了极大的灵活性。推荐使用方法1。

Technorati Tags: , ,

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/32/viewspace-184276/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: ow_ms模板走出ITPUB
请登录后发表评论 登录
全部评论

注册时间:2001-09-24

  • 博文量
    49
  • 访问量
    39071