oracle pbdbms,PB内置Oracle数据库接口的使用方法

本文详细介绍了在PB6.0中调用Oracle存储过程的四种方法,重点讲解了使用RPCFUNC声明存储过程的方法一和DECLAREPROCEDURE声明的方法二。方法一具有更好的运行效率和功能,但不支持INOUT参数和记录传递,而方法二则可传递记录。调用存储过程涉及LocalExternalFunctions声明、参数处理和脚本调用等步骤,对于RefString参数和动态数组需要预先分配空间。
摘要由CSDN通过智能技术生成

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关键字声明为外部函数。在Declare 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画笔中,进入应用属性对话框,在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 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:

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的所有员工的名字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值