- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Prompt for Database Information:连接时是否提 示用户输入用户名和口令; Generate Trace:启动 DB 跟踪工具,跟踪连接; Thread Safe:开发需要多线程环境支持的分布式应 用时,选择该项。缺省为未选,适用于非分布应用; PBDBMS:与存储过程调用方式有关的参数。Oracle 为 7 2 或更高版本时,清除该选项,此时带 IN OUT 参数的存 储过程可作为数据窗口数据源。7 2 版本以下,选择该项 ,调用 PBDBMS.Put-Line 建立存储过程的 SQL 语句,缺省 是选中; Commit on Disconnect:断开连接时,指定提交或回 退未提交的事务; Case Sensitive:连接的 Oracle 服务器是否区分大小 写。注意该项选中时,所有主键、包含主键的表名、外键 须全为大写字符。 PowerBuilder Catalog Tables Owner:指定拥有 PB 系统表的用户,缺省为“SYSTEM” 。如果要使用多种显示 格式或有效性规则,可以在不同的用户下建立几套系统表 ; Table Criteria:指定满足哪些条件的表、视图和同 义词可在“Select Tables”对话框中显示出来。例如 DEV 用户下销售子系统的表都以 SALE 开头,则可以用 SALE%、 DEV、 “TABLE” 、 “VIEW”指定只显示 DEV 用户以 SALE 开 头的表和视图; Asynchronous:选择该项,可在一个复杂的 SQL 语句 执行过程中,返回第一行结果前,切换到其他操作; Number of Seconds to Wait:若上一项选中,还可 进一步通过该项指定检索数据时,等待数据库响应的时间 ; Retrieve Blocking Factor:决定数据窗口对象一次 可从数据库取出的记录数; Number of SQL Staments Cached:PB 可将数据窗口 对象产生的 SQL 语句和嵌入式 SQL 语句保存在 SQL 语句缓冲区
储过程没有输入输出参数,可用下列语句调用: sqlstring=″EXECUTE DEMO1()″ EXECUTE IMMEDIATE:sqlstring; 2)只有输入参数的存储过程。例如 DEV.DEMO2(name I N VARCHAR2,birthday IN DATE) PREPARE SQLSA FROM ″EXECUTE DEMO2(?,?);″ EXECUTE SQLSA USING:ls—name,:ldt—birthday; 如果是 7 2 以下版本的 Oracle,可用方法四 PBDMBS.P ut—Line()函数调用建立存储过程。此时需选上 Database Profile 中的 PBDBMS 复选框。 存储过程作为数据窗口的数据源 以一个简单数据窗口(显示服务器的系统时间)为例说 明怎样创建存储过程作为数据源的数据窗口。 1)在某个包(如 PACK—TYPE)中定义日期类型的Baidu NhomakorabeaRecord er 自定义数据类型 datarec; 2)创建返回系统时间的存储过程: PROCEDURE get—sysdata(sysdt IN OUT PACK-TYPE .datarec)IS BEGIN open sysdt for select sysdate from dual; END; 3)新建数据窗口,数据源选择 Stored Procedure; 4)在随后的 Select Stored Procedure 对话框中选择 g et—sysdate 即可。 如果作为数据源的存储过程有 IN 参数,则这些参数就 是数据窗口的检索参数(Retrieve Argument)。
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: Declare External Functions 对话框中: Subroutine EMP—OF—DEPT(long dept—id,ref str ing name[]) RPCFUNC ALIAS FOR ″DEV.EMP—OF—DEPT
,该参数指定缓冲区为 PB 保留的 SQL 语句数目。该数值可 由下式计算:SQLCache=服务器 OPEN—CURSORS 数-5(保留 的游标数)-本连接预期使用的最大游标数; Disable Bind:指定是否将输入变量与 SQL 语句绑定 ,此参数影响 PB 为数据窗口对象生成 INSERT 语句的方式; Static Bind:数据窗口对象检索数据前是否检测 SEL ECT 语句的合法性; 在 Syntax 页,还可指定日期、时间的格式等。在 Prev iew 页可查看 Database Profile 设置对应的 PowerScript 写 法。 Oracle 存储过程的使用 归纳起来 PB6 0 中调用 Oracle 存储过程有以下四种方 法。 方法一:以关键字 RPCFUNC 声明存储过程; 方法二:以 DECLARE PROCEDURE 语句声明存储过程; 方法三:以动态 SQL 语句实现; 方法四:调用函数 PBDBMS.Put-Line。 一般情况下,方法一能得到较好的运行效率和更完善 的功能。因此推荐使用方法一。但是某些类型的存储过程 只能使用其他方法。以下重点介绍方法一和方法二。 两种方法比较起来,有以下几点主要区别: 1)方法一适用于具有 IN、OUT 和 IN OUT 参数的存储过 程,而方法二仅支持 IN 和 OUT 参数,不支持 IN OUT 参数; 2)方法一对参数的数目无限制,方法二最多支持 255 个参数; 3)方法一不支持记录(Recorder)的传递,方法二可传 递和接收记录。 方法一操作步骤:
Profile Name:为该 Database Profile 起一个有意义 的名称; Server:@TNS:ServerName,其中 ServerName 为上述数 据库别名(服务器名),如@TNS:ORA73; Login ID:Oracle 数据库中实际的用户名,由于 PB 初 次连接到数据库时要自动建立五个系统表(PowerBuilder Catalog Table:PBCATTBL,PBCATCOL,PBCATEDT,PBCATFMT, PBCATVLD,存储表的扩展属性),因此第一个连接到 Oracle 的用户必须具有建表、给 PUBLIC 角色授权等权限。例如可 用 SYSTEM 用户进行第一次连接,此后的连接对用户则无特 殊要求; Password:该用户的口令。 设置上述内容后,即可连上 Oracle。为优化数据库连 接,还可设置下列选项:
″ 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 存
PB 内置 OEACLE 数据库接口的使用方法
PowerBuilder(PB)和 Oracle 分别是前端开发工具和 RD BMS 的主流产品。PB 提供了两种与 Oracle 连接的接口:Pow erSoft 内置的数据库接口(Native Database Interface) 和 ODBC 接口。本文介绍使用 PB6 0 内置 Oracle 接口的方法 ,包括数据描述文件的设置、存储过程的调用和存储过程 作为数据窗口数据源的操作方法等内容,使用的 RDBMS 的 Or acle 7 3。 PowerBuilder 与 Oracle 的连接 假定已安装 Oracle 客户端应用程序。可用 Sqlplus 或 T nsping 等是否能连接到 Oracle 数据库,确定在 SQL NET 配 置文件中使用的数据库别名(Database Alias,又称服务 器名,Server Name)。如有疑问,可在 Oracle 客户端程序 目录下 tnsname.ora 文件中找到。另外保证搜索路径已包括 SQL NET 应用程序的安装目录(如 C:\ORAWIN95\BIN)。 进入 PB 的 Database Profiles 画笔,可看到所有已安 装的数据库接口(PB6 0 缺省安装的是 Oracle 7 3 版的接 口,如使用低版本的 Oracle,需在安装时指定),选择“O7 3 Oracle 7 3” ,点击“New”按钮,进入 Database Pro file Setup 对话框。在“Connection”页输入下列信息: