使用oracle 的 PLSql 定时执行一个存储过程

    技术2022-05-20  48

    /*使用oracle 的 PL/Sql 定时执行一个存储过程

    测试目的:在表 tab 中间隔一分钟插入一条数据

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

    脚本说名:以下代码为 dbms_job 操作的基本写法,其中不包含各个系统函数参数说明,如需要了解“系统函数参数说明”请另行在网上查找  

    注:1.其中的停止运行后继续执行的方法还有待测试   2.开始运行一个计划时,计划内的存储过程将立刻执行一次*/

    --1.创建一个测试表create table tab(dtime date);Select * From tab;

    --2.创建一个存储过程create or replace procedure p_test asbegin insert into tab values(sysdate);end;

    --3.创建一个执行计划:每天1440分钟,即一分钟运行存储过程一次Declare   i Integer;Begin   dbms_job.submit(i,'p_test;',Sysdate,'sysdate+1/1440');end;

    --4.查看已经创建的所有执行计划Select * From user_jobs;

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

    --6.查看计划的运行结果  select     t.dtime    --to_char(t.dtime,'yyyy-mm-dd hh24:mi:ss')   from tab t  Order By t.dtime;

    -- 查出测试表内容   Delete tab t;

    --7.修改执行计划(修改执行的间隔时间)/*sysdate+1              表示每天执行一次sysdate+1/24           表示每小时执行一次sysdate+1/(24*60)      表示每分钟执行一次sysdate+1/(24*60*60)   表示每秒执行一次*/Declare   job_num Integer;Begin   -- 查找计划号  Select t.JOB Into job_num From User_Jobs t ;  -- 修改为:每天执行一次  dbms_job.interval(job_num, 'sysdate+1/(24*60)');end;

    --8.停止一个执行计划/* Sysdate+(5) 加五天, Sysdate+(5/24) 加五时, Sysdate+(5/24/60) 加五分, Sysdate+(5/24/60/60) 加五秒*/Declare   job_num Integer;Begin  -- 查找计划号  Select t.JOB Into job_num From User_Jobs t ;  -- 停止计划,不在执行  --dbms_job.broken(job_num,True);  -- 停止计划,并在两分钟后继续执行  dbms_job.broken(job_num,True,Sysdate+(2/24/60));end;

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

     

     

     


    最新回复(0)