当前位置:首页 » 存储配置 » 数据窗口存储过程

数据窗口存储过程

发布时间: 2022-04-03 05:54:00

❶ PB中数据窗口是通过存储过程创建的,我想知道有没有命令通过数据窗口得到存储过程的sql代码

这个是不可能的,存储过程返回一个结果集,可以是select * from table,也可以是select 列名1,列名2...列名n from table,也可以是select * from table where 1=1,也可以是select * from table where table.id>0 等等,虽然结果集一样,但是语句各不一样,要是可以得到存储过程,你说返回哪个给你呢?所以这种不唯一性决定存储过程是不可以返回的;

❷ 如何用oracle建的存储过程做pb数据窗口

create or replace procere Sel(@name in varchar2)as
begin
select * from user where name=@name;
end; exec Sel(@name)

❸ pb接口用pb吗

PB内置Oracle数据库接口的使用方法2008-12-23 13:34PowerBuilder(PB)和Oracle分别是前端开发工具和RDBMS的主流产品。PB提供了两种与Oracle连接的接口:PowerSoft内置的数据库接口(Native Database Interface)和ODBC接口。本文介绍使用PB6 0内置Oracle接口的方法,包括数据描述文件的设置、存储过程的调用和存储过程作为数据窗口数据源的操作方法等内容,使用的RDBMS的Oracle 7 3。
PowerBuilder与Oracle的连接

假定已安装Oracle客户端应用程序。可用Sqlplus或Tnsping等是否能连接到Oracle数据库,确定在SQL NET配置文件中使用的数据库别名(Database Alias,又称服务器名,Server Name)。如有疑问,可在Oracle客户端程序目录下tnsname.ora文件中找到。另外保证搜索路径已包括SQL*NET应用程序的安装目录(如C:\ORAWIN95\BIN)。

进入PB的Database Profiles画笔,可看到所有已安装的数据库接口(PB6 0缺省安装的是Oracle 7 3版的接口,如使用低版本的Oracle,需在安装时指定),选择“O73 Oracle 7 3”,点击“New”按钮,进入Database Profile Setup对话框。在“Connection”页输入下列信息:Profile Name:为该Database Profile起一个有意义的名称;

Server:@TNS:ServerName,其中ServerName为上述数据库别名(服务器名),如@TNS:ORA73;注意:PB9.5则没有前面那个@TNS:!!!

Login ID:Oracle数据库中实际的用户名,由于PB初次连接到数据库时要自动建立五个系统表(PowerBuilder

Catalog Table:PBCATTBL,PBCATCOL,PBCATEDT,PBCATFMT,PBCATVLD,存储表的扩展属性),因此第一个连接到Oracle

的用户必须具有建表、给PUBLIC角色授权等权限。例如可用SYSTEM用户进行第一次连接;,此后的连接对用户则无特殊要求

Password:该用户的口令。

设置上述内容后,即可连上Oracle。为优化数据库连接,还可设置下列选项:

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语句缓冲区,该参数指定缓冲区为PB保留的SQL语句数目。该数值可由下式计算:SQLCache=服务器OPEN—CURSORS数-5(保留的游标数)-本连接预期使用的最大游标数;

Disable Bind:指定是否将输入变量与SQL语句绑定,此参数影响PB为数据窗口对象生成INSERT语句的方式;

Static Bind:数据窗口对象检索数据前是否检测SELECT语句的合法性;

在Syntax页,还可指定日期、时间的格式等。在Preview页可查看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)的传递,方法二可传递和接收记录。

方法一操作步骤:

1)在用户对象画笔中创建一个Class-Standard类型的,从Transaction继承的用户对象。

2)在此用户对象中,声明Local External Functions,将存储过程以RPCFUNC关键字声明为外部函数。在Declare Local External Functions对话框中按Proceres按钮选择要调用的后台存储过程,或直接输入类似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的所有员工的名字

方法二使用方法:

在脚本中加入如下编码(以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 al;

END;

❹ pb 数据窗口 存储过程更改后数据窗口对象怎么跟随更改

如果对数据窗口代码熟悉就edit source直接修改代码

❺ 在pb的dw_1窗口控件中如何调用sql的存储过程(窗口中有个查询(cb_1))想通过查询执行

数据窗口有几种源,quick select ,sql select ...,最后一个就是存储过程。
你可以使用存储过程最为数据窗口的源,这样就能在前台数据窗口中显示了。

❻ pb怎么动态调用后台存储过程,并且显示到datawindow中

您好,希望以下回答能帮助您
数据窗口中调用过程显示不了结果,你可以直接对其赋值sql语句 dw_1.setsqlselect(ls_sql) dw_1.retrieve()
如您还有疑问可继续追问。

❼ 想在datawindow中显示SQL存储过程的执行结果,在PB中怎么调用

想在datawindow中显示SQL存储过程的执行结果,在PB中怎么调用
数据窗口中调用过程显示不了结果,你可以直接对其赋值sql语句

dw_1.setsqlselect(ls_sql)
dw_1.retrieve()

❽ 如何用存储过程,建动态列的数据窗口

create or replace procere Sel(@name in varchar2)as begin select * from user where name=@name; end; exec Sel(@name)

❾ 在sql server 2005 中怎样建立存储过程与PB 窗口相连

SQL只有在数据库上才能执行,PB不行。

PB的数据窗口只是打包,把SQL查询出来的数据打包。

你可以试着做一个控件,传入SQL,然后自动生成窗口。原理说穿了和你说的“通过数据窗口对象向导创建数据窗口对象”一个实现方式,只不过外表上看来,好像pb执行了一个sql,创建一个数据窗口。

这就是面向对象编程

❿ oracle两种方式创建的(包)存储过程,在PB(Powerbuilder)创建数据窗口数据源为存储过程时为什么看不到

会不会是权限问题?或者你的方法二的存储过程创建到别的schema上了?
查一下字典dba_objects 的owner列
select * from dba_objects where object_name='A_DEMO4'

热点内容
编程文件加密 发布:2024-11-20 23:08:57 浏览:434
举报群源码 发布:2024-11-20 23:07:46 浏览:482
华为云php 发布:2024-11-20 22:46:20 浏览:900
sql2000实例名 发布:2024-11-20 22:30:13 浏览:416
先科服务器ip 发布:2024-11-20 22:26:32 浏览:459
L0加密 发布:2024-11-20 22:23:12 浏览:77
win10怎么取消跳过密码登录密码 发布:2024-11-20 22:18:00 浏览:404
压缩坏1台 发布:2024-11-20 22:17:58 浏览:187
轻松赚脚本 发布:2024-11-20 22:07:39 浏览:382
fpm缓存dns 发布:2024-11-20 21:56:37 浏览:908