標籤:
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
oracle建立job定期運行預存程序