plsql创建截图:
submit一个(每30秒执行一次的)job并马上执行之(不为该job的next_date赋值,即采用其默认值sysdate,则该job在submit后会马上执行):
- DECLARE jobNum number;
- begin
- sys.dbms_job.submit(job => :jobNum,
- what => '<PL/SQL code>;',
- interval => 'SYSDATE + 1/2880');
- commit;
- end;
- DECLARE jobNum number;
- begin
- sys.dbms_job.submit(job => :jobNum,
- what => 'insert into t_job_test values(seq_job_test.nextval, sysdate);',
- interval => 'SYSDATE + 1/2880');
- commit;
- end;
注意:
写PL/SQL procedure的时候,一定要写的够健壮、够完善;如果该procedure会有job来run它,更需要有完善的异常处理机制(捕获所有异常,包括WHEN OTHERS, 把出错信息写入日志。在异常处理中不要继续RAISE。这样运行该procedure的job就保证不会失败了)。要不然,任何未捕获异常的发生都会引起job的failure;在failure 16次后,则其就broken了。
常用 INTERVAL 参数值:
1:每分钟执行
Interval => TRUNC(sysdate,'mi') + 1/ (24*60)
或
Interval => sysdate+1/1440
2:每天定时执行
例如:每天的凌晨1点执行
Interval => TRUNC(sysdate) + 1 +1/ (24)
3:每周定时执行
例如:每周一凌晨1点执行
Interval => TRUNC(next_day(sysdate,'星期一'))+1/24
4:每月定时执行
例如:每月1日凌晨1点执行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24
5:每季度定时执行
例如每季度的第一天凌晨1点执行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24
6:每半年定时执行
例如:每年7月1日和1月1日凌晨1点
Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24
7:每年定时执行
例如:每年1月1日凌晨1点执行
Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24
转:http://wuaner.iteye.com/blog/717793