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

问题: 来源(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: oracle, itpub, job

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

转载于:http://blog.itpub.net/32/viewspace-184276/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值