科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道PB内置Oracle数据库接口的使用方法(2)

PB内置Oracle数据库接口的使用方法(2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文介绍使用PB 6.0内置Oracle接口的方法,包括数据描述文件的设置、存储过程的调用和存储过程作为数据窗口数据源的操作方法等内容,使用的RDBMS的Oracle 7.3。

作者:马长明 来源:天极网 2007年8月28日

关键字: ORACLE

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

方法一操作步骤

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()函数调用建立存储过程。此时需选上Database Profile中的PBDBMS复选框。

存储过程作为数据窗口的数据源

以一个简单数据窗口(显示服务器的系统时间)为例说明怎样创建存储过程作为数据源的数据窗口。

1)在某个包(如PACK—TYPE)中定义日期类型的Recorder自定义数据类型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对话框中选择get—sysdate即可。

如果作为数据源的存储过程有IN参数,则这些参数就是数据窗口的检索参数(Retrieve Argument)。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章