oracle任务job

1)创建测试表

1
create table test1(a date);

2)创建存储过程

1
2
3
4
5
create or replace procedure myproc as
begin
  insert into test1 values(sysdate);
end;
/

3)创建job

1
2
3
4
5
declare job1 number;
begin
  dbms_job.submit(job1,'MYPROC;',sysdate,'sysdate+1/1440');//每分钟执行一次
  commit;
end;

---------------------------或者-------------------------------

1
2
3
4
5
6
7
8
9
declare
  job2 number;
begin
  dbms_job.submit(job       => job2,
                  what      => 'myproc;',
                  next_date => sysdate,
                  interval  => 'sysdate+1/1440');
  commit;
end;

4)查询job

1
select job, broken, what, interval from user_jobs t;

    JOB BROKEN WHAT INTERVAL

1 27 N MYPROC; sysdate+1/1440

2 25 N p_auto_del_mobile_gxxj; sysdate+1

3 26 N p_auto_del_mobile_gxxj; sysdate+1

5)运行job

1
2
3
begin
  dbms_job.run(27);
end;

6)删除job

1
2
3
begin  
   dbms_job.remove(25);   
end;

job: 指的是job的id号。比如下面的 23

failures:job执行的时候失败次数,如果超过了15次,那么broken列将被标为Y,以后就不会运行该job了

broken:默认为N,如果为Y,意味着不再执行该job!

interval:执行job的间隔时间。

what:该job的实际工作

sysdate+1/2      每隔12小时执行一次

sysdate+3/1440   每隔 3 分钟执行一次

trunc(sysdate+1) 每天凌晨

trunc(sysdate+7)  每七天凌晨

trunc(sysdate+30)  每30天凌晨

next_day(trunc(sysdate), ''sunday'')  每周日凌晨

trunc(sysdate+1)+6/24 每天6点

trunc(sysdate+1)+1/3  每天的8点运行

sysdate+30/1440 每30分钟

trunc(last_day(sysdate)) + 1 每月第一天凌晨

trunc(last_day(sysdate)) + 1 + 8/24 + 30/1440 每月第一天8点半

每天的8点到20点之点,每隔15分钟运行一次

1
2
3
4
5
6
7
case
         when to_number(to_char(sysdate, 'hh24')) >= 8 and
              to_number(to_char(sysdate, 'hh24')) <= 20 then
          sysdate + 15 / 1440
         else
          trunc(sysdate + 1) + 1 / 3
       end

6-10月份,每隔30天的凌晨开始运行,其余月份每隔一天早上4点运行

1
2
3
4
5
6
7
case
         when to_number(to_char(sysdate, 'mm')) >= 6 and
              to_number(to_char(sysdate, 'mm')) <= 10 then
          trunc(sysdate + 30)
         else
          trunc(sysdate + 1) + 1 / 6
       end
 
原文地址:https://www.cnblogs.com/xyhero/p/dd1cfa49cfb0126669d6351446b49acb.html