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;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值