实现oracle-job准确定时

下面的代码将MyPkg.MyProc定于每日08:56执行,参数为系统日期前一天:

 
 
  1. declare 
  2.  n_job number;  
  3. begin 
  4.   sys.dbms_job.submit(job => n_job,  
  5.                       what => 'MyPkg.MyProc(to_number(to_char(sysdate-1,''YYYYMMDD'')));',  
  6.                       next_date => to_date('02-08-2012 08:56:00''dd-mm-yyyy hh24:mi:ss'),  
  7.                       interval => 'trunc(sysdate)+1+(8*60+56)/(24*60)');  
  8.   commit;  
  9. end;  

其中准确定时的关键片断是:

 
 
  1. interval => 'trunc(sysdate)+1+(8*60+56)/(24*60)'

网上搜索到的样例往往是sysdate+1,这会根据程序运行结束时间不停的推迟,例如假设程序运行时长始终是4分钟,那么第一天08:56执行,第二天就会09:00执行,第三天09:04执行,依次类推。本例计算公式中运用tunc(sysdate)规避程序运行结束时间的影响,用(8*60+56)/(24*60)来精确指定08:56执行,从而实现job准确定时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值