zoukankan      html  css  js  c++  java
  • oracle建立job定期运行存储过程

    1 首先查看


    SQL> show parameter job

    NAME TYPE VALUE
    ------------------------------------ ----------- ------------------------------
    job_queue_processes integer 10

    如果值是 0 需要修改(如果为0则无法运行job,此值为允许同时运行的job数量)

    alter system set job_queue_processes =10; --或者其他值

    2 一个简单例子:
      
      创建测试表
      SQL> create table TEST(a date);
      
      表已创建。
      
      创建一个自定义过程
      SQL> create or replace procedure MYPROC as
       2 begin
       3 insert into TEST values(sysdate);
       4 end;
       5 /
      
      过程已创建。
      
      创建JOB
      SQL> variable job1 number;
      SQL>
      SQL> begin
       2 dbms_job.submit(:job1,'MYPROC;',sysdate,'sysdate+1/1440');  --每天1440分钟,即一分钟运行test过程一次
       3 end;
       4 /
      
      PL/SQL 过程已成功完成。
      
      运行JOB
      SQL> begin
       2 dbms_job.run(:job1);
       3 end;
       4 /
      
      PL/SQL 过程已成功完成。
      
      SQL> select to_char(a,'yyyy/mm/dd hh24:mi:ss') 时间 from TEST;
      
      时间
      -------------------
      2001/01/07 23:51:21
      2001/01/07 23:52:22
      2001/01/07 23:53:24
      
      删除JOB
      SQL> begin
       2 dbms_job.remove(:job1);
       3 end;
       4 /
      
      PL/SQL 过程已成功完成。
    Sql> print :n;
    系统打印此任务的编号,例如结果为300。
    如上,我们创建了一个每隔1分钟执行一次的任务号为300的任务。可以通过Oracle提供的数据字典user_jobs察看该任务的执行情况:
    sql> select job,next_date,next_sec,failures,broken from user_jobs;
    执行结果如下:
    job next_date next_sec failures broken
    300 2000/10/10 11:45:15 0 N
    这表示任务号为300的任务,下一次将在2000/10/10 11:45:15执行,此任务的执行失败记录为0次。注意:当执行job出现错误时,Oracle将其记录在日志里,失败次数每次自动加1。当执行失败次数达到16时,Oracle就将该job标志为broken。此后,Oracle不再继续执行它,直到用户调用过程dbms_job.broken,重新设置为not broken,或强制调用dbms_job.run来重新执行它。
    除了以上我们讨论的submit存储过程之外,Oracle还提供了其他许多存储过程来操作任务。例如:dbms_job.change 、 dbms_job.what、dbms_job.interval可以用来修改提交的任务。要想删除该任务,只需运行dbms_job.remove(n)即可,其中n为任务号。

    3 上面的例子没有涉及到存储过程带参数的问题,如果带参数假设为
    MYPROC( ina IN VARCHAR2,
    ------------------以下为必须输出参数组---------------------------------
    outa OUT NUMBER,
    outb OUT VARCHAR2)

    则 在建立job的代码中
    创建JOB
      begin
    sys.dbms_job.submit(job => :job,
    what => '
    declare

    outa number; --定义输出变量
    outb varchar2(40);
    begin
    MYPROC(''输入'',outa =>outa ,outb =>outb );
    end;',
    next_date => to_date('10-10-2006 08:48:34', 'dd-mm-yyyy hh24:mi:ss'),
    interval => 'sysdate+1');
    commit;
    end;
    /



    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1399765

    本文来自:新浪博客http://blog.sina.com.cn/s/blog_586f1baf01000bww.html

  • 相关阅读:
    每天进步一点点之查找
    每天进步一点点之堆栈思想
    每天进步一点点之大端存储和小端存储
    每天进步一点点之线性表的考察
    每天进步一点点之出栈顺序考点
    React Native 混合开发与实现
    谈谈JavaScript异步代码优化
    谈谈前端异常捕获与上报
    vue插件编写与实战
    vue项目构建与实战
  • 原文地址:https://www.cnblogs.com/mengyuxin/p/5038024.html
Copyright © 2011-2022 走看看