利用PLSQL工具创建Oracle库定时任务,用于执行存储过程或指定代码
1、什么是定时任务
用于固定时间或执行时间执行既定任务的方法。
1.1语法
语法:
declare job_test number; begin dbms_job.submit( job_test, --job:定时器ID,系统自动获得 'p_json2;', --what:执行的存储过程名 sysdate, --next_date:定时器开始执行的时间,这里表示立即执行 'sysdate + 1/1440' --interval:每隔1分钟执行一次 ); commit; end;
job参数:输出参数,由submit()过程返回的binary_integer这个值用来唯一标识一个工作。一般定义一个变量接收,可以去user_jobs试图查询job值。
what参数:将被执行的PL/SQL代码块,存储过程名称等。
next_date参数:指何时将运行这个工作。
interval参数:指何时这个工作将被重新执行。
1.2 查询job记录
select * from user_jobs; --#查看调度任务 select * from dba_jobs_running; --#查看正在执行的调度任务 select * from dba_jobs; --#查看执行完的调度任务 select * from all_jobs;
1.3删除job
begin dbms_job.remove(查询到的job的id); commit;end;
或者
declare job_no number ; begin select job into job_no from user_jobs where what='TEST1();'--通过存储过程的字段信息来进行查找job的ID标识 DBMS_JOB.remove(job_no); end;
1.4手动调用job
begin dbms_job.run(查询到的job的id); end;
1.5停止job
dbms.broken(job,broken,nextdate); dbms_job.broken(v_job,true,next_date); /*停止一个job,里面参数true也可是false,next_date(某一时刻停止)也可是sysdate(立刻停止)。 */
1.6修改间隔时间
dbms_job.interval(job,interval);
1.7修改下次执行时间
dbms_job.next_date(job,next_date);
interval参数常用值示例
用法 | 描述 |
TRUNC(SYSDATE+1) | 每天午夜12:00 |
TRUNC(SYSDATE+1)+(860+30)/(2460) | 每天早上8:30 |
NEXT_DAY(TRUNC(SYSDATE),“TUESDAY”)+12/24 | 每星期二中午12:00 |
TRUNC(LAST_DAY(SYSDATE)+1) | 每个月第一天的午夜12:00 |
TRUNC(ADD_MONTHS(SYSDATE+2/24,3),“Q”)-1/24 | 每个季度最后一天的晚上11:00 |
TRUNC(LEAST(NEXT_DAY(SYSDATE,“SATURDAY”),NEXT_DAY(SYSDATE,“SUNDAY”)))+(660+10)/(2460) | 每星期六和日早上6:10 |
sysdate+3/(246060) | 每3秒钟执行一次 |
sysdate+2/(24*60) | 每2分钟执行一次 |
TRUNC(sysdate,’mi’) + 1/ (24*60) | 每分钟执行 |
sysdate+1/(24*60) | 每分钟执行 |
sysdate+1 | 每天 |
sysdate+1/24 | 每小时 |
sysdate+2/24*60 | 每2分钟 |
sysdate+30/246060 | 每30秒 |
TRUNC(sysdate+1) | 每天凌晨0点执行 |
TRUNC(sysdate+1)+1/24 | 每天凌晨1点执行 |
TRUNC(sysdate+1)+(860+30)/(2460) | 每天早上8:30点执行 |
TRUNC(next_day(sysdate,‘星期一’))+1/24 | 每周一凌晨1点执行 |
TRUNC(next_Day(sysdate,1))+2/24 | 每周一凌晨2点执行 |
TRUNC(LAST_DAY(SYSDATE)+1) | 每月1日凌晨0点执行 |
TRUNC(LAST_DAY(SYSDATE)+1+1/24) | 每月1日凌晨1点执行 |
TRUNX(ADD_MONTHS(SYSDATE,3),‘q’) | 每季度的第一天凌晨0点执行 |
TRUNX(ADD_MONTHS(SYSDATE,3),‘q’)+1/24 | 每季度的第一天凌晨1点执行 |
TRUNX(ADD_MONTHS(SYSDATE+2/24,3),‘q’)-1/24 | 每季度的最后一天的晚上11点执行 |
ADD_MONTHS(TRUNC(SYSDATE,‘yyyy’),6)+1/24 | 每年7月1日和1月1日凌晨1点 |
ADD_MONTHS(TRUNC(SYSDATE,‘yyyy’),12)+1/24 | 每年1月1日凌晨1点执行 |
以上时间节点仅供参考,更多时间节点请参考修改即可。