扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:中国IT实验室 来源:中国IT实验室 2007年10月7日
关键字: ORACLE
在本页阅读全文(共3页)
两种方法比较起来,有以下几点主要区别:
1)方法一适用于具有IN、OUT和IN OUT参数的存储过程,而方法二仅支持IN和OUT参数,不支持IN OUT参数;
2)方法一对参数的数目无限制,方法二最多支持255个参数;
3)方法一不支持记录(Recorder)的传递,方法二可传递和接收记录。
方法一操作步骤:
1)在用户对象画笔中创建一个Class-Standard类型的,从Transaction继承的用户对象。
2)在此用户对象中,声明Local External Functions,将存储过程以RPCFUNC关键字声明为外部函数。在Declare Local External Functions对话框中按Procedures按钮选择要调用的后台存储过程,或直接输入类似subroutine TEST(long id,ref string name)RPCFUNC ALIAS FOR “DEV?TEST”的语句。例如中DEV?TEST的参数为(id IN NUMBER,name IN OUT VARCHAR2)。
3)保存该用户对象。
4)在Application画笔中,进入应用属性对话框,在Variable Types页,将上Transaction用户对象设置为缺省
的全局变量SQLCA。
5)脚本中,编码调用相应的外部函数。形式:SQLCA?函数名(参数)。如可用“SQLCA?TEST(ln―id,ls―name);”调用例子中定义的DEV?TEST存储过程。其中ln―id,ls―name为调用参数。
方法一注意事项:
1)由于PB中String类型的数据长度是动态分配的,因此对Ref String类型的参数,每次调用前需要申请足够的空间。例如上例从输入的id值检索name,后台声明的NAME数据类型为VARCHAR2(30),每次调用SQLCA?TEST前需要用ls―name=SPACE(30)置ls―name为足够长度的空串。
2)类似地当传递的参数为数组(后台称PL/SQL Table)时,声明参数为相应类型的动态数组,并在每次调用前设置数组上界为足够大的值。例如:DEV用户的DEPT包中声明了TYPE tbl―name IS TABLE OF VARCHAR2(30) INDEX BY BINARY―INTEGER;存储过程EMP―OF―DEPT(dept―id IN NUMBER,name OUT DEPT.tbl―name)返回部门编写为dept―id的部门的所有员工,置name数组中。假定所有部门
的员工数目不超过100,则可用以下语句声明和调用DEV?EMP―OF―DEPT:
Declare External Functions对话框中:
Subroutine EMP―OF―DEPT(long dept―id,ref string name[]) RPCFUNC ALIAS FOR ″DEV.EMP―OF―DEPT
″
PowerScript脚本中:
long ln=dept―id
string lsa―name[]
……
lsa―name[100]=″ //置动态数组lsa―name上界为100
ln―dept―id=2
SQLCA.EMP―OF―DEPT(ln―dept―id,lsa―name) //检索部门2的所有员工的名字
方法二使用方法:
在脚本中加入如下编码(以DEV?TEST为例):
long ln―id
string ls―name
ln―id=100
DECLARE test PROCEDURE FOR DEV.TEST(:ln―id); //test有一个IN参数,一个OUT参数
EXECUTE test;
FETCH test INTO:ls―name;
方法三使用方法:
根据输入输出参数的不同,PB中的动态SQL语句有四种格式:
1)无输入输出参数;
2)只有输入参数,无输出参数;
3)有确定数目输入输出参数;4)输出结果列的数目不定。其中第1)、第2)中格式的动态SQL语句也可用来调用简单的存储过程。
1)没有输入输出参数的存储过程。例如DEV?DEMO1存储过程没有输入输出参数,可用下列语句调用:
sqlstring=″EXECUTE DEMO1()″
EXECUTE IMMEDIATE:sqlstring;
2)只有输入参数的存储过程。例如DEV.DEMO2(name IN VARCHAR2,birthday IN DATE)
PREPARE SQLSA FROM ″EXECUTE DEMO2(?,?);″
EXECUTE SQLSA USING:ls―name,:ldt―birthday;
如果是7?2以下版本的Oracle,可用方法四PBDMBS.Put―Line()函数调用建立存储过程。此时需选上DatabaseProfile中的PBDBMS复选框。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者