--创建测试落地表
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点执行
最后修改:2021 年 10 月 25 日
如果觉得我的文章对你有用,请随意赞赏