现在的位置: 首页 > 综合 > 正文

Oracle Jobs 定时任务 调用存储过程使用说明

2013年12月01日 ⁄ 综合 ⁄ 共 2889字 ⁄ 字号 评论关闭

--Job创建语法
declare
  job number; --由Oracle自动创建Jobs唯一标识
begin
  dbms_job.submit(job,
                  what,
                  next_date,
                  interval, 
                  no_parse);
  commit;
end;

/*创建提交job语法
    使用Submit()过程,工作被正常地计划好,这个过程有五个参数:job、what、next_date、interval与no_parse。
    参数说明:
          1)job参数是由Submit()过程返回的binary_ineger。这个值用来唯一标识一个工作。 
          2)what参数是将被执行的PL/SQL代码块。 
          3)next_date参数指识何时将运行这个工作。 
          4)interval参数何时这个工作将被重执行。(以下是定时时间案例)
                        描述                    INTERVAL参数值
                    每天午夜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)'
                    每分钟执行                 Interval => TRUNC(sysdate,'mi') + 1/ (24*60)
                    每天的凌晨1点执行          Interval => TRUNC(sysdate) + 1 +1/ (24)
                    每周一凌晨1点执行          Interval => TRUNC(next_day(sysdate,'星期一'))+1/24
                    每月1日凌晨1点执行         Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24
                    每季度的第一天凌晨1点执行  Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24
                    每年7月1日和1月1日凌晨1点  Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24
                    每年1月1日凌晨1点执行      Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24
           5)no_parse参数指示此工作在提交时或执行时是否应进行语法分析——TRUE,指示此PL/SQL代码在它第一次执行时应进行语法分析,而FALSE指示本PL/SQL代码应立即进行语法分析。  
*/

--查看已创建的Job任务
select * from dba_jobs ;

/* dba_jobs视图结构并注释
  字段(列)          类型                 描述
  JOB                NUMBER             任务的唯一标示号
  LOG_USER           VARCHAR2(30)       提交任务的用户
  PRIV_USER          VARCHAR2(30)       赋予任务权限的用户
  SCHEMA_USER        VARCHAR2(30)       对任务作语法分析的用户模式
  LAST_DATE          DATE               最后一次成功运行任务的时间
  LAST_SEC           VARCHAR2(8)        如HH24:MM:SS格式的last_date日期的小时,分钟和秒
  THIS_DATE          DATE               正在运行任务的开始时间,如果没有运行任务则为null
  THIS_SEC           VARCHAR2(8)        如HH24:MM:SS格式的this_date日期的小时,分钟和秒
  NEXT_DATE          DATE               下一次定时运行任务的时间
  NEXT_SEC           VARCHAR2(8)        如HH24:MM:SS格式的next_date日期的小时,分钟和秒
  TOTAL_TIME         NUMBER             该任务运行所需要的总时间,单位为秒
  BROKEN             VARCHAR2(1)        标志参数,Y标示任务中断,以后不会运行
  INTERVAL           VARCHAR2(200)      用于计算下一运行时间的表达式
  FAILURES           NUMBER             任务运行连续没有成功的次数
  WHAT               VARCHAR2(2000)     执行任务的PL/SQL块
  CURRENT_SESSION_LABEL RAW             MLSLABEL 该任务的信任Oracle会话符
  CLEARANCE_HI          RAW MLSLABEL     该任务可信任的Oracle最大间隙
  CLEARANCE_LO          RAW              MLSLABEL 该任务可信任的Oracle最小间隙
  NLS_ENV               VARCHAR2(2000)   任务运行的NLS会话设置
  MISC_ENV              RAW(32)          任务运行的其他一些会话参数
*/

/****Oracle Job调用存储过程示例***/
declare
  job number; --由Oracle自动创建Jobs唯一标识
begin
  dbms_job.submit(job,
                  'wh_test(to_char(sysdate,''yyyy-mm-dd''));',
                  sysdate,
                  'sysdate+1/1440',----每天1440分钟,即一分钟运行test过程一次 
                  true);
  commit;
end;

--运行JOB 
begin
  dbms_job.run(28);--28为dba_jobs视图中查到新建job的对应编号
end;

--删除JOB 
begin
  dbms_job.run(28);--28为dba_jobs视图中查到要删除job的对应编号

end;

参考资料:

ww.cnblogs.com/conqueror/archive/2010/10/10/1847085.html

http://space.itpub.net/27157/viewspace-425567

抱歉!评论已关闭.