请注意,本文编写于 591 天前,最后修改于 591 天前,其中某些信息可能已经过时。
--创建测试落地表
create table tmp_20191212_1 (
a varchar2(200),
imptime date default sysdate
);
--创建测试序列
create sequence seq_20191212_1
increment by 1
start with 1
nocycle;
--创建测试落地存储过程
create procedure sp_20191212_1
as
begin
insert into tmp_20191212_1(a)
select seq_20191212_1.nextval from dual;
commit;
end;
--创建JOB
declare
job number;
begin
dbms_job.submit(job => job, --编号
what => 'sp_20191212_1;', --任务调用的存储过程
next_date => sysdate, --下次执行时间(第一次执行时间)
interval => 'sysdate+1/24/60'); --执行间隔(1分钟)
--或者
--dbms_job.submit(job, 'sp_20191212_1;', sysdate, 'sysdate+1/1440');
commit;
end;
--查询JOB
select job, broken, what, interval from user_jobs t;
--手动运行JOB
begin
dbms_job.run(5); --编号
end;
--停止JOB
begin
dbms_job.broken(5, True); --编号
commit;
end;
--停止JOB 并在两分钟后继续执行
begin
dbms_job.broken(5, True, sysdate+(2/24/60));
commit;
end;
--修改JOB执行间隔
begin
dbms_job.interval(5, sysdate+(2/24/60));
commit;
end;
--修改JOB执行过程
begin
dbms_job.interval(5, 'sp_...');
commit;
end;
--修改JOB下次执行时间
begin
dbms_job.next_date(5, sysdate);
commit;
end;
--删除JOB
begin
dbms_job.remove(5); --编号
commit;
end;
--interval 注意创建JOB的时候需要引号转为字符串
Interval?=>?TRUNC(sysdate,'mi')?+?1/?(24*60)? --每分钟执行
interval?=>?'sysdate+1/(24*60)'?? --每分钟执行
interval?=>?'sysdate+1'???? --每天
interval?=>?'sysdate+1/24'??? --每小时
interval?=>?'sysdate+2/24*60'? --每2分钟
interval?=>?'sysdate+30/24*60*60'?? --每30秒
Interval?=>?TRUNC(sysdate+1)?? --每天凌晨0点执行
Interval?=>?TRUNC(sysdate+1)+1/24?? --每天凌晨1点执行
Interval?=>?TRUNC(SYSDATE+1)+(8*60+30)/(24*60)?? --每天早上8点30分执行
Interval?=>?TRUNC(next_day(sysdate,'星期一'))+1/24?? --每周一凌晨1点执行
Interval?=>?TRUNC(next_day(sysdate,1))+2/24?? --每周一凌晨2点执行
Interval?=>TTRUNC(LAST_DAY(SYSDATE)+1)?? --每月1日凌晨0点执行
Interval?=>TRUNC(LAST_DAY(SYSDATE))+1+1/24?? --每月1日凌晨1点执行
Interval?=>?TRUNC(ADD_MONTHS(SYSDATE,3),'q')?? --每季度的第一天凌晨0点执行
Interval?=>?TRUNC(ADD_MONTHS(SYSDATE,3),'q')?+?1/24? --每季度的第一天凌晨1点执行
Interval?=>?TRUNC(ADD_MONTHS(SYSDATE+?2/24,3),'q')-1/24?--每季度的最后一天的晚上11点执行
Interval?=>?ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24?? --每年7月1日和1月1日凌晨1点
Interval?=>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24?? --每年1月1日凌晨1点执行