ORACLE定时存储过程创建与删除

一、定时任务创建

DECLARE
  job_id NUMBER;
BEGIN
  SYS.DBMS_JOB.SUBMIT
  ( job      => job_id ,
   what      => 'procedure_name;' ,
   next_date => to_date('13/09/2021 10:00:00','dd/mm/yyyy hh24:mi:ss'), --下次执行时间
   interval  => 'trunc(sysdate,''mi'')+5/(24*60)' --每隔5分钟执行一次
  );
COMMIT;
END;

二、定时任务删除

begin
  dbms_job.remove(12); --12为具体的user_jobs.job_id
  commit;
end;

三、存储过程执行失败的恢复方法

      首先需要确定执行失败的原因,可以执行失败定时任务对应的what字段下的存储过程,来确定失败原因,如果确认所有的存储过程都可以正常执行,恢复定时任务只需要在 PLSQL 中找到DBMS_JOBS ---> 对应存储过程 job 字段值  ---> run  ,就可以重新启动已经BROKEN的定时任务

四、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)''
每3秒钟执行一次             'sysdate+3/(24*60*60)'
每2分钟执行一次           'sysdate+2/(24*60)'

1、每分钟执行

Interval => TRUNC(sysdate,'mi') + 1/ (24*60) --每分钟执行
interval => 'sysdate+1/(24*60)'  --每分钟执行
interval => 'sysdate+1'    --每天
interval => 'sysdate+1/24'   --每小时
interval => 'sysdate+2/24*60' --每2分钟
interval => 'sysdate+30/24*60*60'  --每30秒

2、每天定时执行

Interval => TRUNC(sysdate+1)  --每天凌晨0点执行
Interval => TRUNC(sysdate+1)+1/24  --每天凌晨1点执行
Interval => TRUNC(SYSDATE+1)+(8*60+30)/(24*60)  --每天早上8点30分执行

3、每周定时执行

Interval => TRUNC(next_day(sysdate,'星期一'))+1/24  --每周一凌晨1点执行
Interval => TRUNC(next_day(sysdate,1))+2/24  --每周一凌晨2点执行

4、每月定时执行

Interval =>TTRUNC(LAST_DAY(SYSDATE)+1)  --每月1日凌晨0点执行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24  --每月1日凌晨1点执行

5、每季度定时执行

Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'q')  --每季度的第一天凌晨0点执行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'q') + 1/24  --每季度的第一天凌晨1点执行
Interval => TRUNC(ADD_MONTHS(SYSDATE+ 2/24,3),'q')-1/24  --每季度的最后一天的晚上11点执行

6、每半年定时执行

Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24  --每年7月1日和1月1日凌晨1点

7、每年定时执行

Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24  --每年1月1日凌晨1点执行

                                                                                                                                                         

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值