--1 创建定时job(第二天的凌晨1点执行'存储过程)
declare x number;
begin
dbms_job.submit
( job => x
,what => '存储过程名称;'
,next_date => to_date(to_char(sysdate+1,'yyyy-mm-dd')||' 01:00:00','yyyy-mm-dd hh24:mi:ss')
,interval => 'sysdate+1'
,no_parse => true
);
end;
commit;
--2 查询是否创建成功
select * from user_jobs;
--3 修改定时job
--(1)修改下次执行时间
declare
begin
dbms_job.next_date(job,next_date);
commit;
end;
--例如:
declare
begin
dbms_job.next_date(1,to_date(to_char(sysdate+1,'yyyy-mm-dd')||' 01:00:00','yyyy-mm-dd hh24:mi:ss'));
commit;
end;
--(2)修改时间间隔
declare
begin
dbms_job.interval(job,interval);--注意:时间间隔需要加单引号
commit;
end;
--例如:
declare
begin
dbms_job.interval(1,'TRUNC(sysdate+1)');--间隔1天(24小时),
commit;
end;
--有时间隔时间无法用以上方式修改时,可以直接在pl/sql中用编辑的方式修改。
--例如:
TRUNC(sysdate,'mi')+1/(24*60) --每分钟执行
--4 删除定时job
declare
job_num number;
begin
select job into job_num from user_jobs where what='存储过程名称;';
dbms_job.remove(job_num);
commit;
end;
--5 拓展
--job的执行时间往后推迟的原因
因为job的启动需要时间或者扫描精度用了时间,解决办法:job的执行时间间隔加trunc函数,例如:trunc(sysdate,'hh24')+1/24,间隔25小时
--oracle JOB常见的执行时间
(1)、每分钟执行
TRUNC(sysdate,'mi')+1/(24*60)
(2)、每天定时执行
每天凌晨0点执行
TRUNC(sysdate+1)
每天凌晨1点执行
TRUNC(sysdate+1)+1/24
每天早上8点30分执行
TRUNC(SYSDATE+1)+(8*60+30)/(24*60)
(3)、每周定时执行
每周一凌晨2点执行
TRUNC(next_day(sysdate,1))+2/24
TRUNC(next_day(sysdate,'星期一'))+2/24
每周二中午12点执行
TRUNC(next_day(sysdate,2))+12/24
TRUNC(next_day(sysdate,'星期二'))+12/24
(4)、每月定时执行
每月1日凌晨0点执行
TRUNC(LAST_DAY(SYSDATE)+1)
每月1日凌晨1点执行
TRUNC(LAST_DAY(SYSDATE)+1)+1/24
(5)、每季度定时执行
每季度的第一天凌晨0点执行
TRUNC(ADD_MONTHS(SYSDATE,3),'q')
每季度的第一天凌晨2点执行
TRUNC(ADD_MONTHS(SYSDATE,3),'q')+2/24
每季度的最后一天的晚上11点执行
TRUNC(ADD_MONTHS(SYSDATE+ 2/24,3),'q')-1/24
(6)、每半年定时执行
每年7月1日和1月1日凌晨1点执行
ADD_MONTHS(TRUNC(sysdate,'yyyy'),6)+1/24
(7)、每年定时执行
每年1月1日凌晨2点执行
ADD_MONTHS(TRUNC(sysdate,'yyyy'),12)+2/24
(8)、自己整理的
select sysdate from dual;
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
select sysdate+1 from dual;
select trunc(sysdate) from dual;
select trunc(sysdate)+1 from dual;
select trunc(sysdate)+1+1/(24) from dual;
select sysdate+1/(24*60*60) from dual;
select trunc(sysdate,'mi')+1/(24*60) from dual;
定时job的创建和使用
最新推荐文章于 2023-12-16 10:45:00 发布