OracleJOB定时任务

–创建表

createtable jobtest ( idvarchar2(50) primarykey, namevarchar2(20), age number(3) )

–创建存储过程

createorreplaceprocedure jobtestprocedure

isbegin

insertinto jobtest values(to_char(sysdate,’yyyy-mm-dd hh:mm:ss’),’figo’,28);

commit;

end;

–创建定时任务

declare myjob number;

begin

dbms_job.submit(myjob,’jobtestprocedure;’,sysdate,’sysdate+1/24/60/60′); –每5秒执行一次

end;

–查看定时任务

–查看定时器:以dba角色登录执行

select * from dba_jobs;

–或者当前用户

select * from user_jobs;

–启动定时任务

begin

dbms_job.run(3);

end;

–删除定时任务

begin

dbms_job.remove(3);

end;

commit;

exec dbms_job.remove(3);–删除一个定时器

exec dbms_job.run(3);–运行一个定时器

exec dbms_job.broken(3,sys.diutil.int_to_bool(1));–停止一个定时器

exec dbms_job.interval(3, ‘sysdate + 60/1440’);–改变一个定时器的执行频率成每隔一小时执行一次

–查看数据表,看看任务是否已经执行

select count(1) from jobtest;

定时器的参数说明:

myjob参数是由submit()过程返回的binary_ineger。这个值用来唯一标识一个工作;

what参数是将被执行的pl/sql代码块,这里指的是一个存储过程,注意名字后面的分号;

next_date参数指识何时将运行这个工作。写job的时候可以不指定该值;

interval参数何时这个工作将被重执行。

关于interval的设置,参考以下几个例子:

1、 每分钟执行

interval => trunc(sysdate,’mi’) + 1 / (24*60)

2、 每天定时执行

例如:每天的凌晨2点执行

interval => trunc(sysdate) + 1 +2 / (24)

3、 每周定时执行

例如:每周一凌晨2点执行

interval => trunc(next_day(sysdate,2))+2/24 –星期一,一周的第二天

4、 每月定时执行

例如:每月1日凌晨2点执行

interval =>trunc(last_day(sysdate))+1+2/24

5、 每季度定时执行

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

interval => trunc(add_months(sysdate,3),’q’) + 2/24

6、 每半年定时执行

例如:每年7月1日和1月1日凌晨2点

interval => add_months(trunc(sysdate,’yyyy’),6)+2/24

7、 每年定时执行

例如:每年1月1日凌晨2点执行

interval =>add_months(trunc(sysdate,’yyyy’),12)+2/24

(0)
上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐