1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Oracle 定时任务执行存储过程【建议收藏】

Oracle 定时任务执行存储过程【建议收藏】

时间:2020-01-30 09:46:10

相关推荐

Oracle 定时任务执行存储过程【建议收藏】

首先用一个完整的例子来实现定时执行存储过程。

任务目标:每小时向test表中插入一条数据。

实现方案

1.通过 oracle 中 dbms_job 完成存储过程的定时调用

2.在存储过程中完成相应的逻辑操作

实现步骤

1.创建一个测试表

create table test(dTime date);

2.创建一个存储过程

create or replace procedure p_test as begin insert into test values(sysdate); commit;end;

3.创建执行计划:每小时运行一次存储过程

参数说明: declarejobno number;beginDBMS_JOB.SUBMIT(jobno => --jobno,定时器ID,系统自动获得,也可进行指定what => 'your_procedure;', --调用的存储过程名称next_date => sysdate, -- 设置的时间是由系统自动生成,可以根据自己的需要设置该时间interval => 'sysdate+1+5/(24)');--多长时间调用一次,时间间隔是每小时,根据需要可以自己设置commit;end;Declare i Integer; Begin dbms_job.submit(i,'p_test;',Sysdate,'sysdate+1/24'); end; select * from user_jobs where what='your_procedure;' ; --查看调度任务select * from dba_jobs_running; --查看正在执行的调度任务select * from dba_jobs; --查看执行完的调度任务--查看任务队列情况 broken:Y:没启动 N:启动select job as jobno,next_date,next_sec,failures,broken from user_jobs where what='your_procedure;' ;

4.运行执行计划

Declare jobno Integer; Begin dbms_job.run(jobno); -- 运行制定的执行计划 end;

5.停止执行计划

Declare jobno Integer; Begin dbms_job.broken(jobno,True); -- 停止计划,不再继续执行 dbms_job.broken(jobno,True,Sysdate+(2/24/60)); -- 停止计划,并在两分钟后继续执行 end;

6.删除执行计划

Declare jobno Integer; Begin dbms_job.remove(jobno); end;

7.修改执行计划的间隔时间

Declare jobno Integer; Begin dbms_job.interval(jobno, 'sysdate+1/(24*60)'); -- 修改为:每分钟执行一次 end;

8.修改要执行的操作:

Declare jobno Integer; Begin dbms_job.what(jobno, what); --指定任务号以及存储过程end;

9.修改下次执行时间:

declarebegindbms_job.next_date(jobno, next_date); --指定任务号的时间end;

10.时间

sysdate+1 表示每天执行一次sysdate+1/24 表示每小时执行一次sysdate+1/(24*60)表示每分钟执行一次sysdate+1/(24*60*60) 表示每秒执行一次Sysdate+5 加5天,Sysdate+5/24 加5小时,Sysdate+5/24/60 加5分钟,Sysdate+5/24/60/60 加5秒

.INTERVAL参数常用值示例

每天午夜12点 ‘‘TRUNC(SYSDATE + 1)’’

每天早上8点30分 ‘‘TRUNC(SYSDATE + 1) + (860+30)/(2460)’’

每星期二中午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/(246060)’

每2分钟执行一次 ‘sysdate+2/(24*60)’

每分钟执行

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/246060’ --每30秒

2:每天定时执行

Interval => TRUNC(sysdate+1) --每天凌晨0点执行

Interval => TRUNC(sysdate+1)+1/24 --每天凌晨1点执行

Interval => TRUNC(SYSDATE+1)+(860+30)/(2460) --每天早上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点执行

好了,今天就到这儿吧,小伙伴们点赞、收藏、评论,一键三连走起呀,我是老贺,我们下期见~~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。