下面的代码将MyPkg.MyProc定于每日08:56执行,参数为系统日期前一天:
- declare
- n_job number;
- begin
- sys.dbms_job.submit(job => n_job,
- what => 'MyPkg.MyProc(to_number(to_char(sysdate-1,''YYYYMMDD'')));',
- next_date => to_date('02-08-2012 08:56:00', 'dd-mm-yyyy hh24:mi:ss'),
- interval => 'trunc(sysdate)+1+(8*60+56)/(24*60)');
- commit;
- end;
- /
其中准确定时的关键片断是:
- 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准确定时。