欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

OracleJOB定时任务

程序员文章站 2022-05-28 08:59:26
--创建表 createtable jobtest ( idvarchar2(50) primarykey, namevarchar2(20), age number(3) )...

--创建表

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