下面的代码将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准确定时。