读书人

oracle中建立带参数的job定时实施

发布时间: 2012-07-25 09:43:06 作者: rapoo

oracle中建立带参数的job,定时执行

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 过程已成功完成。

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;
/

读书人网 >其他数据库

热点推荐