Oracle的dbms_jobs 自动计划

oracel dbms_jobs包可以提交作业到作业队列中,这个包中还提供其它一些函数管理以前提交的作业,如对作业进行修改、禁止或删除等操作。

常用函数:

submit(),提交作业到作业队列。

isumbit()

remove(),从作业队列中删除作业。

change(),改变已有作业的参数。

what(),改变作业要执行的代码。

next_date(),改变作业下一次执行时间。

interval(),改变作业执行的时间间隔。

broken(),暂停执行作业。

run(),强制执行作业。

最常用的submit()函数:

dbms_jobs.submit(

       job out binary_integer,

       what in varchar2,

       next_date in date default sysdate,

       interval in varchar default null,

       no_parse in boolean default false,

       instance in binary_integer default any_instance,

       force in boolean default false

);

submit函数参数:

job,作业的作业号,是个输出参数,所以调用submit函数时,这个参数要指定一个已存在的变量。

what,作业要执行的代码,一般是存储过程。

next_date,下一次作业运行的日期。

interval作业执行的间隔时间,这个参数默认值是null也就是what指定的代码只在next_date这一时间执行一次。

no_parse,默认值是false,当参数值是false,提交作业时就对what指定的代码进行语法分析;当参数值是true,第一次运行what指定代码时才进行语法分析。

instance,指明运行作业的数据库实例。

force,如果是true,instance可以是任何正数;如果是falseinstance指定的实例必须正在运行。

示例:

var jobno number;

begin

dbms_job.submit(:jobno,'pro_name;',trunc(sysdate)+(18/24),'trunc(sysdate+1,''hh'')');--每天18点执行

commit;

end;

上面这段话要在 命令窗口 下运行,如在pl/sql developer里面的-->新键-->命令窗口

这样就会在每天的18点执行存储过程pro_name

---------------------------------------------------------------------------------------------------------------------------

用法DEMO:  
     DBMS_JOB.SUBMIT(:jobno,//job号   
                                     'your_procedure;',//要执行的过程   
                                     trunc(sysdate)+1/24,//下次执行时间   
                                     'trunc(sysdate)+1/24+1'//每次间隔时间   
                                   );   
     删除job:dbms_job.remove(jobno);   
     修改要执行的操作:job:dbms_job.what(jobno,what);   
     修改下次执行时间:dbms_job.next_date(job,next_date);   
     修改间隔时间:dbms_job.interval(job,interval);   
     停止job:dbms.broken(job,broken,nextdate);   
     启动job:dbms_job.run(jobno);   

附:调用语句和参数说明:   

dbms_job.submit( job out binary_integer,

what       in   archar2,
next_date     in   date,
interval     in   varchar2,
no_parse     in   boolean)
其中:
●    job:输出变量,是此任务在任务队列中的编号;
●    what:执行的任务的名称及其输入参数;
●    next_date:任务执行的时间;
●    interval:任务执行的时间间隔。

 DEMO示例:

declare   
                jobid     number;   
                v_sql     varchar2(2000);   
    begin   
                v_sql:='begin   
                                      if     to_char(sysdate,''HH24:MI'')=''15:30''     then   -- 15:30执行
                                            insert     into     rjck.rkjl(cksj)     select     cksj     from     wzcs.ckjl;   
                                            dbms_output.put_line(''inserted     success'');   
                                      end     if;   
                                      commit;   
                                exception   
                                      when     others     then   
                                      rollback;   
                                      dbms_output.put_line(SQLERRM);   
                                end;   
                              ';   

                dbms_job.submit(jobid,v_sql,sysdate,'sysdate+1/1440');                   

                dbms_job.run(jobid);                   

                dbms_output.put_line('job     '||to_char(jobid)||'     is     running');    

end; 

posted @ 2012-03-06 10:27  ミ茹此茹此↘  Views(464)  Comments(0Edit  收藏  举报