定时job的创建和使用

--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
每天早上830分执行
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)、每半年定时执行
每年71日和11日凌晨1点执行
ADD_MONTHS(TRUNC(sysdate,'yyyy'),6)+1/24
(7)、每年定时执行
每年11日凌晨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;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值