)類似地當傳遞的參數為數組(後台稱PL/SQL Table)時聲明參數為相應類型的動態數組並在每次調用前設置數組上界為足夠大的值例如DEV用戶的DEPT包中聲明了TYPE tblname IS TABLE OF VARCHAR() INDEX BY BINARYINTEGER;存儲過程EMPOFDEPT(deptid IN NUMBERname OUT DEPTtblname)返回部門編寫為deptid的部門的所有員工置name數組中假定所有部門的員工數目不超過則可用以下語句聲明和調用DEVEMPOFDEPT:
Declare External Functions對話框中
Subroutine EMPOFDEPT(long deptid
ref string name[]) RPCFUNC ALIAS FOR ″DEVEMPOFDEPT″
PowerScript腳本中
long ln=deptid
string lsaname[]
……
lsaname[]=″ //置動態數組lsaname上界為
lndeptid=
SQLCAEMPOFDEPT(lndeptidlsaname) /
/檢索部門的所有員工的名字
方法二使用方法
在腳本中加入如下編碼(以DEVTEST為例)
long lnid
string lsname
lnid=
DECLARE test PROCEDURE FOR DEVTEST(lnid)
//test有一個IN參數一個OUT參數
EXECUTE test;
FETCH test INTO:lsname;
方法三使用方法
根據輸入輸出參數的不同PB中的動態SQL語句有四種格式
)無輸入輸出參數)只有輸入參數無輸出參數)有確定數目輸入輸出參數)輸出結果列的數目不定其中第)第)中格式的動態SQL語句也可用來調用簡單的存儲過程
)沒有輸入輸出參數的存儲過程例如DEVDEMO存儲過程沒有輸入輸出參數可用下列語句調用
sqlstring=″EXECUTE DEMO()″
EXECUTE IMMEDIATE:sqlstring;
)只有輸入參數的存儲過程例如DEVDEMO(name IN VARCHARbirthday IN DATE)
PREPARE SQLSA FROM ″EXECUTE DEMO(??)″
EXECUTE SQLSA USING:lsname:ldtbirthday;
如果是以下版本的Oracle可用方法四PBDMBSPutLine()函數調用建立存儲過程此時需選上Database Profile中的PBDBMS復選框
存儲過程作為數據窗口的數據源
以一個簡單數據窗口(顯示服務器的系統時間)為例說明怎樣創建存儲過程作為數據源的數據窗口
)在某個包(如PACKTYPE)中定義日期類型的Recorder自定義數據類型datarec;
)創建返回系統時間的存儲過程
PROCEDURE getsysdata(sysdt IN OUT PACKTYPEdatarec)IS
BEGIN
open sysdt for select sysdate from dual;
END;
)新建數據窗口數據源選擇Stored Procedure;
)在隨後的Select Stored Procedure對話框中選擇getsysdate即可
如果作為數據源的存儲過程有IN參數則這些參數就是數據窗口的檢索參數(Retrieve Argument)
[] []
From:http://tw.wingwit.com/Article/program/PB/201311/24642.html