Oracle定时执行存储过程

  定时执行存储过程在平时开发中经常会用到,年前的时候自己也做了一个,由于时间关系一直没能记录,现记录下来。
  
   首先用一个完整的例子来实现定时执行存储过程。

任务目标:每小时向test表中插入一条数据

实现方案:
    1.通过 oracle 中 dbms_job 完成存储过程的定时调用
    2.在存储过程中完成相应的逻辑操作

实现步骤:
  1.创建一个测试表
create table test(dTime date);
 
  2.创建一个存储过程
create or replace procedure p_test as
begin
insert into test values(sysdate);
end;

  3.创建执行计划:每小时运行一次存储过程
Declare
  i Integer;
Begin
   dbms_job.submit(i,'p_test;',Sysdate,'sysdate+1/24');
end;

  4.运行执行计划
Declare
  jobno Integer;
Begin
-- 查找计划号
Select t.JOB into jobno From User_Jobs t ;
-- 运行制定的执行计划
dbms_job.run(jobno);
end;

  5.查看任务队列情况
select job,next_date,next_sec,failures,broken from user_jobs;

  6.查看任务执行情况
select to_char(dTime ,'yyyy/mm/dd hh24:mi:ss') from test order By dTime;

  7.停止执行计划
Declare
  jobno Integer;
Begin
  -- 查找计划号
  Select t.JOB into jobno From User_Jobs t ;
  -- 停止计划,不再继续执行
  --dbms_job.broken(jobno,True);
  -- 停止计划,并在两分钟后继续执行
  dbms_job.broken(jobno,True,Sysdate+(2/24/60));
end;

  8.删除执行计划
Declare
  jobno Integer;
Begin
  -- 查找计划号
  Select t.JOB into jobno From User_Jobs t ;
  dbms_job.remove(jobno);
end;

  9.修改执行计划
Declare
  jobno Integer;
Begin
  -- 查找计划号
  Select t.JOB into jobno From User_Jobs t ;
  -- 修改为:每分钟执行一次
  dbms_job.interval(jobno, 'sysdate+1/(24*60)');
end;

参数说明:
DBMS_JOB.SUBMIT(jobno =>jobID,//对应的唯一id(jobID <-> jobName)唯一映射
               procedureName=> 'your_procedure;',  //调用的存储过程名称
                 next_date => sysdate,   //下次执行的时间(第一次执行的时间)
                 interval => 'sysdate+1/1440');  //每次执行间隔的时间

以上就是定时执行存储过程的全部内容,留待后用吧。

猜你喜欢

转载自lafecat.iteye.com/blog/2186568
今日推荐