oracle 创建JOB的两种方法

1、创建JOB,可以指定固定的时间(对运行时间的管理更加明细)。

select job_name, state from user_scheduler_jobs;

grant create job to btupayprod; 

begin

   dbms_scheduler.create_job(job_name        => 'JOB',

                             job_type        => 'STORED_PROCEDURE',

                             job_action      => 'proc_balance_fix_mon', --存储过程名

                             start_date      => sysdate,

                             repeat_interval => 'FREQ=minutely; INTERVAL=45; BYHOUR=15,16,17',

                             comments        => '执行余额校验补数程序');

end;

2、需要的权限较小,一般不需要另外赋予其他的权限,但是只能指定固定的时间间隔。

declare   

      job_id   pls_integer; 

begin

sys.dbms_job.submit(job => job_id,

                      what => 'proc_balance_fix_mon;',

                      next_date => to_date('07-08-2015 20:00:00', 'dd-mm-yyyy hh24:mi:ss'),

                      interval => 'TRUNC(sysdate,''mi'') + 40 / (24 * 60)');

--commit;

end;

oracle JOB常见的执行时间

 TRUNC(SYSDATE +1) + (3*60+10)/(24*60)

1、每分钟执行

TRUNC(sysdate,'mi')+1/(24*60)

  www.2cto.com  

2、每天定时执行

例如:

每天凌晨0点执行

TRUNC(sysdate+1)

每天凌晨1点执行

TRUNC(sysdate+1)+1/24

每天早上8点30分执行

TRUNC(SYSDATE+1)+(8*60+30)/(24*60)

 

3、每周定时执行

例如:

每周一凌晨2点执行

TRUNC(next_day(sysdate,1))+2/24

TRUNC(next_day(sysdate,'星期一'))+2/24

每周二中午12点执行

TRUNC(next_day(sysdate,2))+12/24

TRUNC(next_day(sysdate,'星期二'))+12/24

 

4、每月定时执行

例如:

每月1日凌晨0点执行

TRUNC(LAST_DAY(SYSDATE)+1)

每月1日凌晨1点执行

TRUNC(LAST_DAY(SYSDATE)+1)+1/24

 

5、每季度定时执行

每季度的第一天凌晨0点执行

TRUNC(ADD_MONTHS(SYSDATE,3),'q')

每季度的第一天凌晨2点执行

TRUNC(ADD_MONTHS(SYSDATE,3),'q')+2/24

每季度的最后一天的晚上11点执行

TRUNC(ADD_MONTHS(SYSDATE+ 2/24,3),'q')-1/24

 

6、每半年定时执行

例如:

每年7月1日和1月1日凌晨1点执行

ADD_MONTHS(TRUNC(sysdate,'yyyy'),6)+1/24

 

7、每年定时执行

例如:

每年1月1日凌晨2点执行

ADD_MONTHS(TRUNC(sysdate,'yyyy'),12)+2/24


请使用浏览器的分享功能分享到微信等