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‘);  //每次执行间隔的时间

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

http://lafecat.iteye.com/blog/2186568

时间: 2024-10-21 18:13:40

Oracle定时执行存储过程(转)的相关文章

ORACLE 定时执行存储过程

[sql] view plaincopy /* 查询: select job,broken,what,interval,t.* from user_jobs t; job job的唯一标识,自动生成的 broken 是否处于运行状态,N;运行:Y:停止 what 存储过程名称 next_date 初次执行时间 interval 执行周期 删除: begin dbms_job.remove(jobno); end; 根据what的内容确定其对应的job,并如此执行删除 执行时间例子: 描述    

oracle定时执行存储过程

//create table Sql代码   create table getSysDate(test date); //create procedure Java代码   create or replace procedure insertSysDate as begin insert into getSysDate values (sysdate); end ; //create job Sql代码   declare job1 number; begin dbms_job.submit(j

oracle job 定时执行 存储过程

oracle job 定时执行 存储过程   一:简单测试job的创建过程案例: 1,先创建一张JOB_TEST表,字段为a 日期格式 SQL> create table JOB_TEST(a date); Table created SQL> commit; Commit complete 2,创建一个存储过程 bb 作用是往pig表中插入数据 SQL> create or replace procedure JOB_PRO_TEST as 2  begin 3  insert int

定时执行存储过程

定时执行存储过程 基础 Oracle定时器 Oracle定时器:定时执行某个存储过程. 通过pl/SQL的图形化界面可以看到.定时器包括:调度和存储过程连接口 存储过程连接口 存储过程连接口,主要告诉定时器要执行哪一个存储过程.存储过程连接口就是存储过程执行的入口.从图形化界面可以看出"Action"就是要执行的存储过程.而"Arguments"就是调用该存储过程所需要的参数类型及存储过程所调用的必须参数. 存储过程 存储过程(Stored Procedure)是在

mysql 存储过程中使用事物+事件定时执行存储过程

(1)存储过程 DROP PROCEDURE IF EXISTS proc_test; CREATE PROCEDURE proc_test() BEGIN DECLARE t_error INTEGER DEFAULT 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1; START TRANSACTION; insert into score_record_bak(openid, nickname, city_id, city

Oracle定时任务执行存储过程备份日志记录表

写在前面 需求 备份系统日志表T_S_LOG, 按照操作时间字段OPERATETIME, 将每天的日志增量备份到另一张表. 思路 1.创建一张数据结构完全相同的表T_S_LOG_BAK作为备份表 2.查出T_S_LOG中需要备份的数据 3.将数据赋给游标变量 4.遍历游标将数据逐条插入T_S_LOG_BAK 5.创建无参存储过程将游标的这部分操作作为存储过程主体执行 6.创建定时任务定时执行该存储过程 操作环境 Oracle11g T_S_LOG日志表(部分数据) 1 -- ----------

job定时执行存储过程

--查询job select job,broken,what,interval,t.* from user_jobs t; --删除job begin dbms_job.remove(109); end; --新建job declare job number; begin dbms_job.submit(job, 'OMGEMP_PER2USER;', sysdate, 'TRUNC(SYSDATE + 1)'); end commit; job job的唯一标识,自动生成的 broken 是否

每天定时执行存储过程

1.创建存储过程 CREATE  PROCEDURE `update_cloud_componentrepairrecorTime`() BEGIN update cloud_componentrepairrecord set StartTime = now(), Endtime =  date_add( now() , INTERVAL   datediff(Starttime ,Endtime) day ) where endtime<=now(); END 2.定时执行 CREATE EV

oracle job定时执行存储过程

JOB定时跑插入语句1.建插入数据的存储过程create or replace procedure report_web asV_START_DATE DATE;V_END_DATE  DATE;beginV_START_DATE := TRUNC(SYSDATE) - 1;V_END_DATE    := TRUNC(SYSDATE);begininsert into [email protected]select * from report_web_doctor awhere a.last_