Oracle 10g實現(xiàn)存儲過程異步調(diào)用 |
發(fā)布時間: 2012/8/29 17:46:13 |
DBMS_JOB是什么? 主要用來在后臺運行程序,是數(shù)據(jù)庫中一個極好的工具. 可用于自動調(diào)整調(diào)度例程任務(wù),例如分析數(shù)據(jù)表,執(zhí)行一些歸檔操作,清理草稿表等等. 使用語法說明. JOB: 一個作業(yè)標識符,由系統(tǒng)來分配(OUT參數(shù)). WHAT: 將要運行的SQL文本,必須是有效的PL/SQL語句或一段代碼. 例如: 運行存儲過程P,可以傳遞字符串P;(包括分號)給這個例程。無論在WHAT參數(shù)中提交什么,將被封裝成如下PL/SQL塊: Declare Job Binary_Integer := :Job; Next_Date Date := :Mydate; Broken Boolean := False; Begin What :Mydate := Next_Date; If Broken Then :B := 1; Else :B := 0; End If; End; NEXT_DATE: 日期函數(shù)字符串,用來計算作業(yè)下次運行的時間. NO_PARSE: 確定WHAT參數(shù)在提交時是否進行有效性分析。 INSTANCE: 只得在松耦合聚簇的機器上,在并行服務(wù)器模式(一個Oracle可以運行的模式)下才有意義,這將指定在哪個實例上作業(yè)可以執(zhí)行. FORCE: 只有在并行服務(wù)器模式下才有意義. 如設(shè)置為True(默認值),可以使用任何實例數(shù)據(jù)庫提交作業(yè), 如設(shè)置為False, 相關(guān)實例不可用,提交請求將失敗. 在DBMS_JOB程序包中也有其它入口點. SUBMIT是用來調(diào)度作業(yè)的一個,其他的允許操作已調(diào)度的作業(yè),執(zhí)行操作,如RUN,REMOVE和CHANGE操作. 示例 利用DBMS_Job包功能, 將存儲過程的執(zhí)行集中提交給Oracle Job來處理, 客戶端無需等待. 1. 創(chuàng)建一張表,包含每個參數(shù)的字段,再加一個ID主碼字段. Create Table run_movedetail ( ID number primary key, Param1 varchar2(255), Param1 varchar2(255), RunDate Date ) 此表不僅作為將要提交的處理過程排隊的地方,而且當提交時,也可作為已提交處理過程保存永久日志的地方. 2. 創(chuàng)建fast_movedetail存儲過程(創(chuàng)建作業(yè)ID及把各參數(shù)Insert到run_movedetail). create or replace procedure fast_movedetail(p_Param1 varchar2,p_Param2 varchar2) As L_job number; Begin dbms_job.submit(L_job,’background_movedetail(JOB);’); Insert into run_movedetail(ID,Param1,Parma2) values (L_job, p_Param1, p_Param2); End; 該例程將提交一項作業(yè)background_movedetail,并且將它傳遞給JOB參數(shù). 3. 創(chuàng)建background_movedetail存儲過程. Create or replace procedure background_movedetail(p_job in number) As L_rec run_movedetail%rowtype; Begin Select * into L_rec from run_movedetail where id = p_job; Pr_movedetail(L_rec.Param1,L_rec.Param2); //業(yè)務(wù)存儲過程調(diào)用 Update run_movedetail set RunDate = sysdate where id = p_job; //調(diào)用實際使用的Pr_movedetail例程, 然后更新記錄,記錄實際提交時間. End; 最后在客戶端直接調(diào)用fast_movedetail即可. 本文出自:億恩科技【mszdt.com】 服務(wù)器租用/服務(wù)器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |