PB内置OEACLE数据库接口的使用方法

上传人:206****923 文档编号:41697850 上传时间:2018-05-30 格式:DOC 页数:6 大小:32KB
返回 下载 相关 举报
PB内置OEACLE数据库接口的使用方法_第1页
第1页 / 共6页
PB内置OEACLE数据库接口的使用方法_第2页
第2页 / 共6页
PB内置OEACLE数据库接口的使用方法_第3页
第3页 / 共6页
PB内置OEACLE数据库接口的使用方法_第4页
第4页 / 共6页
PB内置OEACLE数据库接口的使用方法_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《PB内置OEACLE数据库接口的使用方法》由会员分享,可在线阅读,更多相关《PB内置OEACLE数据库接口的使用方法(6页珍藏版)》请在金锄头文库上搜索。

1、PB 内置 OEACLE 数据库接口的使用方法(深圳:独孤求败 2003-05-16)PowerBuilder(PB)和 Oracle 分别是前端开发工具和 RDBMS 的主流产品。PB 提供了两种与 Oracle 连接的接口:PowerSoft 内置的数据库接口 (Native Database Interface)和 ODBC 接口。本文介绍使用 PB6.0 内置 Oracle 接口的方法,包括数据描述文件的设置、存储过程的调用和存储 过程作为数据窗口数据源的操作方法等内容,使用的 RDBMS 的 Oracle 7.3。PowerBuilder 与 Oracle 的连接假定已安装 Orac

2、le 客户端应用程序。可用 Sqlplus 或 Tnsping 等是否能连接到 Oracle 数据库,确定在 SQL.NET 配置文件中使用的数据库别名 (Database Alias,又称服务器名,Server Name)。如有疑问,可在 Oracle 客户端程序目录下 tnsname.ora 文件中找到。另外保证搜索路径已 包括 SQL.NET 应用程序的安装目录(如 C:ORAWIN95BIN)。进入 PB 的 Database Profiles 画笔,可看到所有已安装的数据库接口(PB6.0 缺省安装的是 Oracle 7.3版的接口,如使用低版本的 Oracle, 需在安装时指定),

3、选择“Oracle 7.3”,点击“New”按钮,进入 Database Profile Setup 对话框。在“Connection”页输入下列信息: Profile Name:为该 Database Profile 起一个有意义的名称;Server:TNS:ServerName,其中 ServerName 为上述数据库别名(服务器名),如TNS:ORA73;Login ID:Oracle 数据库中实际的用户名,由于 PB 初次连接到数据库时要自动建立五个系统表(PowerBuilder Catalog Table:PBCATTBL,PBCATCOL,PBCATEDT,PBCATFMT, P

4、BCATVLD,存储表的扩展属性),因此第一个连接到 Oracle 的用户必须具有建表、给 PUBLIC 角 色授权等权限。例如可用 SYSTEM 用户进行第一次连接,此后的连接对用户则无特殊要求;Password:该用户的口令。设置上述内容后,即可连上 Oracle。为优化数据库连接,还可设置下列选项:Prompt for Database Information:连接时是否提示用户输入用户名和口令;Generate Trace:启动 DB 跟踪工具,跟踪连接;Thread Safe:开发需要多线程环境支持的分布式应用时,选择该项。缺省为未选,适用于非分布应用;PBDBMS:与存储过程调用方

5、式有关的参数。Oracle 为 7.2 或更高版本时,清除该选项,此时带 IN OUT 参数的存储过程可作为数据窗口数据 源。7.2 版本以下,选择该项,调用 PBDBMS.PutLine 建立存储过程的 SQL 语句,缺省是选中;Commit on Disconnect:断开连接时,指定提交或回退未提交的事务;Case Sensitive:连接的 Oracle 服务器是否区分大小写。注意该项选中时,所有主键、包含主键的表名、外键须全为大写字符。PowerBuilder Catalog Tables Owner:指定拥有 PB 系统表的用户,缺省为“SYSTEM”。如果要使用多种显示格式或有效

6、性规则,可以在 不同的用户下建立几套系统表;Table Criteria:指定满足哪些条件的表、视图和同义词可在“Select Tables”对话框中显示出来。例如 DEV 用户下销售子系统的表都 以 SALE 开头,则可以用 SALE、DEV、“TABLE”、“VIEW”指定只显示 DEV 用户以 SALE 开头的表和视图;Asynchronous:选择该项,可在一个复杂的 SQL 语句执行过程中,返回第一行结果前,切换到其他操作;Number of Seconds to Wait:若上一项选中,还可进一步通过该项指定检索数据时,等待数据库响应的时间 ;Retrieve Blocking F

7、actor:决定数据窗口对象一次可从数据库取出的记录数;Number of SQL Staments Cached:PB 可将数据窗口对象产生的 SQL 语句和嵌入式 SQL 语句保存在 SQL 语句缓冲区,该参数指定缓冲区为 PB 保留的 SQL 语句数目。该数值可由下式计算:SQLCache=服务器 OPENCURSORS 数5(保留的游标数)本连接预期使用的最大游标数;Disable Bind:指定是否将输入变量与 SQL 语句绑定,此参数影响 PB 为数据窗口对象生成 INSERT 语句的方式;Static Bind:数据窗口对象检索数据前是否检测 SELECT 语句的合法性;在 Sy

8、ntax 页,还可指定日期、时间的格式等。在 Preview 页可查看 Database Profile 设置对应的 PowerScript 写法。Oracle 存储过程的使用归纳起来 PB60 中调用 Oracle 存储过程有以下四种方法。方法一:以关键字 RPCFUNC 声明存储过程;方法二:以 DECLARE PROCEDURE 语句声明存储过程;方法三:以动态 SQL 语句实现;方法四:调用函数 PBDBMS.PutLine。一般情况下,方法一能得到较好的运行效率和更完善的功能。因此推荐使用方法一。但是某些类型的存储过程只能使用其他方法。以下 重点介绍方法一和方法二。两种方法比较起来,

9、有以下几点主要区别:1)方法一适用于具有 IN、OUT 和 IN OUT 参数的存储过程,而方法二仅支持 IN 和 OUT 参数,不支持 IN OUT 参数;2)方法一对参数的数目无限制,方法二最多支持 255 个参数;3)方法一不支持记录(Recorder)的传递,方法二可传递和接收记录。方法一操作步骤:1)在用户对象画笔中创建一个 ClassStandard 类型的,从 Transaction 继承的用户对象。2)在此用户对象中,声明 Local External Functions,将存储过程以 RPCFUNC 关键字声明为外部函数。在 Declare Local External Fu

10、nctions 对话框中按 Procedures 按钮选择要调用的后台存储过程,或直接输入类似 subroutine TEST(long id,ref string name)RPCFUNC ALIAS FOR “DEVTEST”的语句。例如中 DEVTEST 的参数为(id IN NUMBER,name IN OUT VARCHAR2)。3)保存该用户对象。4)在 Application 画笔中,进入应用属性对话框,在 Variable Types 页,将上 Transaction 用户对象设置为缺省的全局变量 SQLCA。5)脚本中,编码调用相应的外部函数。形式:SQLCA函数名(参数)。

11、如可用“SQLCATEST(lnid,lsname );”调用例子中定义的 DEVTEST 存储过程。其中 lnid, lsname 为调用参数。方法一注意事项:1)由于 PB 中 String 类型的数据长度是动态分配的,因此对 Ref String 类型的参数,每次调用前需要申请足够的空间。例如上例从输入的 id 值检索 name,后台声明的 NAME 数据类型为 VARCHAR2(30),每次调用 SQLCATEST 前需要用 lsname=SPACE(30)置 lsname 为足够长度的空 串。2)类似地当传递的参数为数组(后台称 PL/SQL Table) 时,声明参数为相应类型的动

12、态数组,并在每次调用前设置数组上界为足够大的 值。例如:DEV 用户的 DEPT 包中声明了 TYPE tblname IS TABLE OF VARCHAR2(30) INDEX BY BINARYINTEGER;存储过程 EMPOFDEPT (deptid IN NUMBER,name OUT DEPT.tblname)返回部门编写为 deptid 的部门的所有员工,置 name数组中。假定所有部门的员工数目不 超过 100,则可用以下语句声明和调用 DEVEMPOFDEPT:Declare External Functions 对话框中:Subroutine EMPOFDEPT(long

13、 deptid,ref string name) RPCFUNC ALIAS FOR DEV.EMPOFDEPT PowerScript 脚本中:long ln=deptidstring lsanamelsaname100= /置动态数组 lsaname 上界为 100lndeptid=2SQLCA.EMPOFDEPT(lndeptid,lsaname) / /检索部门 2 的所有员工的名字方法二使用方法:在脚本中加入如下编码(以 DEVTEST 为例):long lnidstring lsnamelnid=100DECLARE test PROCEDURE FOR DEV.TEST(:lni

14、d); /test 有一个 IN 参数,一个 OUT 参数EXECUTE test;FETCH test INTO:lsname;方法三使用方法:根据输入输出参数的不同,PB 中的动态 SQL 语句有四种格式:1)无输入输出参数;2)只有输入参数,无输出参数;3)有确定数目输入输出 参数;4)输出结果列的数目不定。其中第 1)、第 2)中格式的动态 SQL 语句也可用来调用简单的存储过程。1)没有输入输出参数的存储过程。例如 DEVDEMO1 存储过程没有输入输出参数,可用下列语句调用: sqlstring=EXECUTE DEMO1()EXECUTE IMMEDIATE:sqlstring;

15、2)只有输入参数的存储过程。例如 DEV.DEMO2(name IN VARCHAR2,birthday IN DATE)PREPARE SQLSA FROM EXECUTE DEMO2(?,?);EXECUTE SQLSA USING:lsname,:ldtbirthday;如果是 72 以下版本的 Oracle,可用方法四 PBDMBS.PutLine()函数调用建立存储过程。此时需选上 DatabaseProfile 中的 PBDBMS 复选框。存储过程作为数据窗口的数据源以一个简单数据窗口(显示服务器的系统时间)为例说明怎样创建存储过程作为数据源的数据窗口。1)在某个包(如 PACKTYPE)中定义日期类型的 Recorder 自定义数据类型 datarec;2)创建返回系统时间的存储过程:PROCEDURE getsysdata(sysdt IN OUT PACKTYPE.datarec)ISBEGINopen sysdt for select sysdate from dual;END;3)新建数据窗口,数据源选择 Stored Procedure;4)在随后的 Select Stored Procedure 对话框中选择 getsysdate 即可。如果作为数据源的存储过程有 IN 参数,则这些参数就是数据窗口的检索参数(Retrieve Argument)。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号