sybase存储过程问题

2025-03-07 版权声明 我要投稿

sybase存储过程问题(共4篇)

sybase存储过程问题 篇1

select @nSerialNo = serialno from schedule where phonenum= @strPhoneNum and type = @nType

if @@rowcount = 0

begin

...

end

else

begin

...

end

上面的select结果是空记录集,存储过程一执行到空记录集,就会返回?

答:if exists(select @nSerialNo = serialno from schedule where phonenum= @strPhoneNum and type = @nType)这个语句的逻辑有点问题?

if exists 一般是用来确定是否存在类似的记录?你现在又要将存在的结果赋值?其实还不如写 if exists(select 1 from schedule where phonenum= @strPhoneNum and type = @nType)

确定是否存在这样的记录,在执行相应的处理,

sybase存储过程问题

sybase存储过程问题 篇2

关键词:存储过程,SYBASE,PB,结果集,FMIS

SYBASE是目前广泛使用的一种大型的关系型数据库,它性能优良、功能强大。在它所提供的众多数据处理工具中,存储过程(Stored Procedure)技术以其强大的功能、卓越的灵活性而成为SYBASE的重要内容之一,深受广大软件开发人员的青睐。在数据库应用系统中恰当而充分地使用存储过程,既能向用户返回数据、在表中插入或修改数据、执行系统函数和管理任务等,也能自动地在SYBASE上存储应用程序的业务逻辑和函数功能,这样在服务器级上就可以对数据做出有关决策[1]。特别是在开发财政信息数据库这一类应用系统时,由于涉及到整个财政部门的各个方面,数据量庞大、流程复杂、计算统计繁琐,使用存储过程能够提高整个应用的性能,优化数据库应用系统,同时也使得开发工作变得更轻松。

1 SYBASE存储过程

1.1 存储过程简介

SYBASE存储过程是为了完成特定的功能而由SQL语句和流程控制语句写成的过程程序[2],完成一定的数据库访问功能或提供一定服务,这个程序经编译和优化后集中存储在数据库服务器中,可供客户应用程序调用,也可以被其它程序调用执行。

SYBASE存储过程可分为系统存储过程和自定义存储过程两种[2]。系统存储过程是由SYBASE数据库系统创建的,完成与更新系统表相关的数据库管理等任务。而自定义存储过程,则是根据应用系统的不同需求由应用系统的开发者利用SQL语言的可编程性构造控制流语句的集成。

SYBASE存储过程具有能够增强SQL语言的功能和灵活性,保证数据的安全性和完整性,提高程序的执行效率,增强应用系统的可维护性等优点。

1.2 存储过程的定义

1.2.1 存储过程的创建

用户可用CREATE PROCedure语句创建一个存储过程。其语法规则为[2,3]:

其中:procedurename:存储过程名。number:序号,用以区别同名的两个存储过程。parametername:过程参数名。=default:缺省值,如果调用程序没提供参数值,则取该参数的缺省值。OUTput:变量参数,当参数名后包含OUTput选项时,存储过程通过该参数给调用程序返回值。WITH RECOMPILE:重编译选项,当创建命令带有该选项时,每次执行存储过程时,都要重新编译执行方案[2,3]。

1.2.2 存储过程的调用执行

调用存储过程的语法为:

在调用存储过程时能够返回一个整数,称之为“返回状态值”,-1到-99表示不同的错误,此处用@returstatus接收返回状态值。该命令中其它选项含义与创建命令中的选项含义相同。

1.2.3 存储过程的删除

语法:DROP PROCedure[owner.]procedurename

其中,procedurename是要被删除的存储过程名字。

2 在PB中调用执行存储过程

PB(PowerBuilder)是SYBASE公司开发的面向对象可视化开发工具,完全支持客户/服务器体系结构[4]。在PB中可通过两种方法调用SYBASE的存储过程:一种是直接调用存储过程来完成数据库的操作。另一种是通过控件DataWindow获取存储过程结果集。

2.1 应用程序中编码直接调用存储过程

此时PB分四步调用存储过程:声明存储过程,执行存储过程,获取结果集,关闭存储过程。

2.1.1 声明存储过程(DECLARE)

其中,logicalprocedurename是服务器上的存储过程procedurename在PB中的本地逻辑名称,选项@return取得存储过程的返回值,@parametername1是存储过程输入参数的名称,localpara1是传进去的本地变量的值,在参数名后加保留字OUTput指定存储过程中的输出参数,transactionobject是同数据库连接的事物对象。

2.1.2 执行存储过程(EXECUTE)

语法:EXECUTE logicalprocedurename;

其中logicalprocedurename是服务器上的存储过程在PB中的本地名称。

2.1.3 取结果集(FETCH)

在存储过程中由SELECT语句检索出的数据称为结果集,结果集要从服务器中用FETCH语句取到本地才能进行处理。语法:FETCH logicalprocedurename INTO:localvariable;

在实际应用中,一个存储过程往往有多条SELECT语句,这时便产生了多个结果集。如果每条SELECT语句要同时检索出多个字段的数据,通常需要定义多个本地变量,并通过循环将这些数据放在不同的本地变量中。SYBASE存储过程执行后产生的数据除了SELECT 语句形成的结果集外,还有用RETURN语句产生的长整型返回值,以及用OUTput标识的输出参数。当所有结果集都取完后,PB用最后一条FETCH语句获取返回值和输出参数[3],取值的顺序是:返回值,输出参数1,输出参数2,…,输出参数N。此外,还可以通过SQLCODE的值来判断FETCH语句是否成功。当SQLCODE为0时,表示取值正常;为100时,表示结果集数据被取完;为-1时,表示取值出错。

2.1.4 关闭存储过程(CLOSE)

语法:CLOSE logicalprocedurename;

对于返回结果集的存储过程,需要用CLOSE关闭该存储过程,以释放存储过程执行时占用的资源;对于不返回结果集的存储过程,PB会自动关闭该存储过程。

2.2 DataWindow获取结果集

当DataWindow与存储过程连接实现对数据库数据的显示时,先用存储过程将数据在服务器上准备好,然后将数据窗口的数据源指定为该存储过程,用DataWindow从服务器上按照条件从数据表中检索,显示数据。

3 存储过程在FMIS中的应用

3.1 FMIS简介

3.1.1 系统功能

财政管理信息系统(FMIS)是为适应国家财政体制的改革及财政监管制度信息化建设的需要,某财政局针对财政工作中的实际情况而开发的管理系统,包括财政集中支付管理与电子政务管理两大功能子系统。其中,财政集中支付管理子系统是对财政收支信息进行统一管理;电子政务管理子系统完成财政资金的计划、调度、管理等功能。

3.1.2 系统结构

系统采用客户/服务器结构。服务器端采用Windows NT Server或Windows2000 Server,数据库系统采用Sybase ASE 12.5,客户端采用Windows XP,以PB8.1作为开发平台。由于财政信息量大,计算流程复杂,若不使用存储过程,处理业务信息时需要通过网络向数据库服务器发送很多SQL语句,并伴随大量的表数据传递,效率很低,因此本系统中所有的业务逻辑均采用存储过程来处理。操作员通过前端界面,调用后台存储过程实现商业逻辑与数据库的交互。

3.1.3 存储过程的编码流程

在进行FMIS系统开发时,规范了客户端与服务器端的编码流程。具体如下:首先对在PB中向输入参数传入的多个变量(或值)用“#”拼接成一个参数,并对其加密,调用执行存储过程时,依次调用相关的存储过程对输入参数进行解密、拆分,然后进行一系列的业务操作,若有多个结果集或输出参数时,则用“/”分别将所有结果集和输出参数拼接起来,进行加密处理,在PB中取完数据之后再进行解密、拆分,做相应处理。这种采用拼接—拆分参数和结果集的方法与前面介绍的用循环的方式获取多个结果集不同,它在一定程度上减轻了网路负担,也有利于保证系统的安全性。其中,服务器端的存储过程编码流程如图1所示。

3.2 应用实例

3.2.1 实例说明

财政管理业务过程中拨款通知单的处理过程包括拨款通知书的录入、查询、修改、审核、批准等。其中,在进行审核拨款通知单操作时,要求对用户所选定的通知单进行批量审核。具体实现时,是在前端PB中先建立数据库连接,然后采用循环依次调用后台存储过程来处理,最后给出本次操作的结果信息。现在以此为例,介绍该存储过程及其前端调用的实现。

3.2.2 存储过程的代码示例

3.2.3 用PB调用存储过程的代码

下面是进行拨款通知单审核操作时,前端PB调用后台存储过程fuppaybookcheck的程序。主要代码如下:

4 结束语

由于存储过程的优良特性,它在数据库应用软件的开发中有着广泛的应用。通过以上实例可以看到,在数据处理过程中涉及到多张表或处理流程复杂时,将PB与存储过程结合在一起工作,能够简化软件的开发,提高SQL语句的运行效率;采用拼接—拆分参数的方法处理多个参数和结果集,更进一步减少了网络传输流量,提高了系统效率,一定程度上保证了安全性。而且,当数据库的结构发生变化时,前台应用程序不用做任何改动,非常灵活,优化了整个数据库应用系统。财政管理系统投入使用以来,用户反映良好,在数据量日益增大的情况下(现在有些表的数据量已达到几百万条),系统仍然运行良好。

参考文献

[1]刘独玉,等.基于MS SQL Server的存储过程的研究与应用[J].四川轻化工学院学报,2001,14(2):25-32.

[2]R.兰金斯,等.Sybase SQL SERVER 11参考大全[M].希望图书创作室,译.北京:宇航出版社,1998.

[3]SYBASE Corporation.SYBASE SQL Server User’s Guide 11.0[M].USA:SYBASE Corporation Press,1996.

sybase存储过程问题 篇3

-11-11oracle 视图权限 oracle 创建视图权限不足

2012-11-11oracle 声明游标(不具备字段)规则应用

-03-03Oracle数据库索引的维护

-04-04oracle监控某表变动触发器例子(监控增,删,改)

-07-07[Oracle] 分析AWR报告的方法介绍

2014-06-06Oracle 11g自动诊断信息库(Automatic Diagnostic Repository,AD

2007-03-03Oracle 9i轻松取得建表和索引的DDL语句

2007-04-04Oracle轻松取得建表和索引的DDL语句

管理存储过程数据库教程 篇4

存储过程被创建以后,它的名字存储在系统表sysobjects 中;它的源代码存放在系统表syscomments 中,可以通过MS SQL Server 提供的系统存储过程来查看关于用户创建的存储过程信息。

1通过Enterprise Manager 管理工具同样可以查看存储过程的源代码

其操作如下:

(1) 启动Enterprise Manager, 登录到要使用的服务器。

(2) 选择要创建存储过程的数据库,在左窗格中单击Stored Procedure 文件夹,此时在右窗格中显示该数据库的所有存储过程。

(3) 在右窗格中,右击要查看源代码的存储过程,在弹出的菜单中选择Properties选项,此时便可看到存储过程的源代码。如图12-4 所示:

2 使用sp_helptext 存储过程查看存储过程的源代码

其语法格式如下:

sp_helptext 存储过程名称

例如要查看数据库pubs 是否是存储过程reptq1 的源代码,则执行sp_helptext reptq1。

注意:如果在创建存储过程时使用了WITH ENCRYPTION选项,那么无论是使用Enterprise Manager还是系统存储过程sp_helptext都无法查看到存储过程的源代码。

12.3.2 重新命名存储过程

修改存储过程的名字使用系统存储过程sp_rename。 其命令格式为:

sp_rename 原存储过程名, 新存储过程名

例12-4 :将存储过程reptq1 修改为newproc 其语句为:

sp_rename reptq1, newproc

另外,通过Enterprise Manager 也可修改存储过程的名字,其操作过程与WINDOWS 下修改文件名字的操作类似。即首先选中需修改名字的存储过程,然后右击鼠标,在弹出菜单中选取rename 选项,最后输入新存储过程的名字。

12.3.3 删除存储过程

删除存储过程使用drop 命令,drop 命令可将一个或多个存储过程或者存储过程组从

当前数据库中删除。其语法规则为:

DROP PROCEDURE {procedure}} [,…n]

例12-5: 如将存储过程reptq1 从数据库中删除,则执行:

drop procedure reptq1

12.3.4 执行存储过程

执行已创建的存储过程使用EXECUTE 命令,其语法如下:

[EXECUTE]

{[@return_statur=]

{procedure_name[;number] | @procedure_name_var}

[[@parameter=] {value | @variable [OUTPUT] | [DEFAULT] [,…n]

[WITH RECOMPILE]

各参数的含义如下:

@return_status

是可选的整型变量,用来存储存储过程向调用者返回的值,

@procedure_name_var

是一变量名用来代表存储过程的名字。

其它参数据和保留字的含义与CREATE PROCEDURE 中介绍的一样。

例12-6: 该存储过程被用来将两个字符串连接成一个字符串,并将结果返回。创建存储过程:

12.3.5 修改存储过程

修改以前用CREATE PROCEDURE 命令创建的存储过程,并且不改变权限的授予情况以及不影响任何其它的独立的存储过程或触发器常使用ALTER PROCEDURE 命令。其语法规则是:

ALTER PROC[EDURE] procedure_name [;number]

[ {@parameter data_type } [VARYING] [= default] [OUTPUT]] [,...n]

[WITH

{RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION}]

[FOR REPLICATION]

AS

sql_statement [...n]

其中各参数和保留字的具体含义请参看CREATE PROCEDURE 命令。

下面将举一个例子使读者对该命令有更为深刻的理解。

将该段代码输入到SQL Server Query Analyzer 窗口中运行后结果为:

上一篇:200x年劳动保障工作总结和200x年工作打算下一篇:市场侵略,中国人的营销观

热门文章
    相关推荐