話很少說,直接正題。偏重Declare方式sql
1、PB中調用過程的通常格式app
Declare my_proce Procedure For p_get_name; // 定義過程調用 Execute my_proce ; // 執行過程,這裏是不須要其餘參數的 If SQLCA.SQLCode <> 0 Then // 調用過程出現錯誤處理 End If Fetch my_proce Into :ls_ReturnName; // 獲取出參值,也就是OUT的變量,若是沒有out類型的變量,這句也就不須要了 If SQLCA.SQLCode <> 0 Then // 獲取數據出現錯誤處理 End If Close my_proce ; // 關閉調用
2、下面主要表述不一樣的存儲過程對應的定義方式 函數
1、 無入參存儲過程調用對象
Create Or Replace Procedure p_get_name(v_name Out Varchar2) As //存儲過程,有一個out類型參數,無入參 Begin v_name := 'Jone'; End; //在PB中這樣定義 Declare my_proce Procedure For p_get_name; // 正確 Declare my_proce Procedure For p_get_name(); // 這個也正確 //若是你試圖傳一個參數 Declare my_proce Procedure For p_get_name(:ls_Name); 這個就會在執行的時候報錯了
2、 有入參存儲過程調用接口
Create Or Replace Procedure p_get_name(v_First in Varchar2, v_Last in varchar2, v_name Out Varchar2) As Begin v_name := v_First||v_Last; End; //在PB中這樣定義 ,這裏起名A ,B ,主要是爲了避免以字面意義影響了思路 Declare my_proce Procedure For p_get_name(:ls_A ,:ls_B) //正確,這裏的變量會和過程變量循序的對應 ,也就是ls_A對應v_first ,ls_B 對應 v_Last Declare my_proce Procedure For p_get_name(:ls_B ,:ls_A) //正確,這裏的變量會和過程變量循序的對應 ,也就是ls_B對應v_first ,ls_A 對應 v_Last Declare my_proce Procedure For p_get_name("Michael ","Jordan") //錯誤,直接使用值是不行的,必須使用變量 //咱們來指定對應關係,這樣就不依賴你輸入的順序了 Declare my_proce Procedure For p_get_name(v_last=>:ls_A,v_first=>:ls_B) Declare my_proce Procedure For p_get_name(v_first=>:ls_B,v_last=>:ls_A) //上面這2個定義是徹底同樣的 Declare my_proce Procedure For p_get_name(v_first1=>:ls_First,v_last=>:ls_Last) //這個定義是錯誤的 ,由於過程當中根本就沒有叫v_first1的參數 Declare my_proce Procedure For p_get_name(:ls_A ,:ls_B,:ls_C) //錯誤,你試圖給給OUT類型的參數也傳一個進去就錯誤了 /*注意: 若是存儲過程定義的OUT類型的參數不在最後,而是位於入參的中間或者前面的話,那麼在PB中定義的話就必須指定對應,不然會報錯的,好比:*/ Create Or Replace Procedure p_get_name(v_name Out Varchar2, v_First in Varchar2, v_Last in varchar2 ) As Begin v_name := v_First||v_Last; End; //這是就必須使用 v_First=> ,v_Last=>這樣的定義 ,不然就是錯誤的
3、INOUT類型過程的調用事務
//PB中使用Declare方式不能調用具備in out類型參數的存儲過程的,故採用外部接口的方式 //直接上步驟 1. 建立一個事務對象 uo_transcation , new->pb object->standart class->transcation ,命名爲uo_transcation 2. 在uo_transcation 的Local External Functions 中定義存儲過程,形如: subroutine p_get_name(string v_First, string v_Last,ref string v_name) rpcfunc 1. subroutine 過程無返回值 2. rpcfunc 不明白,照寫吧 ,呵呵 3. ref 這個是重點 ,表明這變量能夠是out,in out 類型 3. 把uo_transcation 看成默認事務對象 1. 找到application ,也就是你程序寫第一open的那個地方 2. 點擊菜單 view -> propreties 就打開application的屬性了 3. 點擊 additional Properties -> variable Types ->sqlca 下面框修改爲uo_transcation 4. OK 4. 在程序中直接使用 sqlca.p_get_name(a,b,c)這樣的就能夠 ,和普通函數同樣 注意: 其實這也是PB調用存儲過程的一個方法