oracle job的用法

kondruz發表於2009-03-15

一個簡單例子:       
    
     建立測試表   
     SQL>      create      table      a(a      date);   
    
     表已建立。   
    
     建立一個自定義過程   
     SQL>      create      or      replace      procedure      test      as   
         2        begin   
         3        insert      into      a      values(sysdate);   
         4        end;   
         5        /   
    
     過程已建立。   
    
     建立JOB   
     SQL>      variable      job1      number;   
     SQL>     
     SQL>      begin   
         2        dbms_job.submit(:job1,'test;',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      a;   
    
     時間   
     -------------------   
     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      過程已成功完成。   
    
    
     select      job,to_char(next_date,'yyyy-mm-dd      hh24:mi:ss')      from      all_jobs;   
    
    
     ----------job的使用:   
    
     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:任務執行的時間間隔。

例題:(來源:)

要建一個觸發器,在每天15:30的時候把wzcs.ckjl的表裡面的cksj(出庫時間)欄位為當天的記錄插入到rjck.rkjl裡面!請問如何實現?

declare   
                jobid     number;   
                v_sql     varchar2(2000);   
    begin   
                v_sql:='begin   
                                      if     to_char(sysdate,''HH24:MI'')=''15:30''     then   
                                            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;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17065702/viewspace-567392/,如需轉載,請註明出處,否則將追究法律責任。

相關文章