日期:2014-05-16  浏览次数:20525 次

ORACLE DBMS_JOB包参数之--interval
Internal参数是一个表示Oracle合法日期表达式的字符串。
这个日期字符串的值在每次任务被执行时算出,算出的日期表达式有两种可能,要么是未来的一个时间要么就是null。强调一点:next_date是在一个任务开始时算出的,而不是在任务成功完成时算出的。

当任务成功完成时,系统通过更新任务队列目录表将前面算出的next_date值置为下一次任务要运行的时间。当由interval表达式算出next_date是null时,任务自动从任务队列中移出,不会再继续执行。因此,如果传递一个null值给interval参数,则该任务仅仅执行一次。

通过给interval参数赋各种不同的值,可以设计出复杂运行时间计划的任务。

一个任务的定时执行,有三种定时要求:
1.在一个特定的时间间隔后,重复运行该任务。
2.在特定的日期和时间运行任务。
3.任务成功完成后,下一次执行应该在一个特定的时间间隔之后。

网上一些时间设置的参考:
      每天午夜12点 :'TRUNC(SYSDATE + 1)'

  每天早上8点30分:'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)'

  每星期二中午12点:'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24'

  每个月第一天的午夜12点: 'TRUNC(LAST_DAY(SYSDATE ) + 1)'

  每个季度最后一天的晚上11点 'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24'

  每星期六和日早上6点10分 'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6*60+10)/(24*60)'

  其中li_jobno是它的ID,可以通过这个ID停掉这个任务,最后想说的是不要执行多次,你可以在里面管理起来,发现已经运行了就不SUBMIT

  每天运行一次 'SYSDATE + 1'

  每小时运行一次 'SYSDATE + 1/24'

  每10分钟运行一次 'SYSDATE + 10/(60*24)'

  每30秒运行一次 'SYSDATE + 30/(60*24*60)'

  每隔一星期运行一次 'SYSDATE + 7'

  不再运行该任务并删除它 NULL

  每年1月1号零时    trunc(last_day(to_date(extract(year from sysdate)||'12'||'01','yyyy-mm-dd'))+1)

参考:http://www.cnblogs.com/hoojo/p/oracle_procedure_job_interval.html
http://docstore.mik.ua/orelly/oracle/bipack/ch13_03.htm