)类似地当传递的参数为数组(后台称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)
[] []