|
oracle存储过程的使用
归纳起来PB6 0 中调用oracle存储过程有以下四种方法。
方法一:以关键字RPCFUNC 声明存储过程;
方法二:以DECLARE PROCEDURE 语句声明存储过程;
方法三:以动态SQL 语句实现;
方法四:调用函数PBDBMS.Put-Line.
一般情况下,方法一能得到较好的运行效率和更完善的功能。因此推荐使用方法一。但是某些类型的存储过程只能使用其他方法。以下重点介绍方法一和方法二。
两种方法比较起来,有以下几点主要区别:
1 )方法一适用于具有IN、OUT 和IN OUT参数的存储过程,而方法二仅支持IN和OUT 参数,不支持IN OUT参数;
2 )方法一对参数的数目无限制,方法二最多支持255 个参数;
3 )方法一不支持记录(Recorder)的传递,方法二可传递和接收记录。
方法一操作步骤:
1 )在用户对象画笔中创建一个Class -Standard类型的,从Transaction继承的用户对象。
2 )在此用户对象中,声明Local External Functions,将存储过程以RPCFUNC关键字声明为外部函数。在Decla re Local External Functions 对话框中按Procedures按钮选择要调用的后台存储过程,或直接输入类似subroutin e TEST(long id ,ref string name )RPCFUNC ALIAS FOR “DEV TEST”的语句。例如中DEV TEST的参数为(id IN NUMBER,name IN OUT VARCHAR2)。
3 )保存该用户对象。
4 )在Application 画笔中,进入应用属性对话框,在V ariable 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 B Y BINARY —INTEGER ;存储过程EMP —OF—DEPT(dept—id IN NUMBER,name OUT DEPT.tbl —name)返回部门编写为de pt —id的部门的所有员工,置name数组中。假定所有部门的员工数目不超过100 ,则可用以下语句声明和调用DEV EMP —OF—DEPT: 上一页 [1] [2] [3] 下一页 |