WEB开发网
开发学院数据库Sybase Sybase存储过程的建立和使用 阅读

Sybase存储过程的建立和使用

 2010-06-19 15:12:37 来源:WEB开发网   
核心提示:存储过程的建立和使用,我们将通过几个例子进行介绍,假设有一个用下述语句生成的技能工资表RS-LS-GZ-JiNeng:create table RS_LS_GZ_JiNeng /*技能工资表*/(GeRen_id char(4), /*个人代码 */RiQi smalldatetime, /*执行日期 */YuanYi

存储过程的建立和使用,我们将通过几个例子进行介绍。

假设有一个用下述语句生成的技能工资表RS-LS-GZ-JiNeng:

create table RS_LS_GZ_JiNeng     /*技能工资表*/
(GeRen_id char(4),         /*个人代码 */
RiQi smalldatetime,         /*执行日期 */
YuanYin_id char(1) null,       /*变动原因代码 */
JinE smallmoney)           /*技能工资金额 */

该表存储着某单位员工多年来技能工资的历史档案。

例1.如果要查询全体员工的技能工资变动历史,则可先建立一个存储过程p-RsGz-JiNeg-All:

create procedure p_RsGz_JiNeng_All as
select *
from RS_LS_GZ_JiNeng
order by GeRenid,RiQi

然后用批处理语句调用存储过程p_RsGz_JiNeng_All进行查询:

execute p_RsGz_JiNeng_All 

本例只显示查询到的数据,无输入、输出参量,是最简单的一个存储过程。[page]

例2.如果要查询某人技能工资的变动历史,可建立另一个存储过程p_RsGz_JiNeng:

create procedure p_RsGz_JiNeng @c_GeRenId char(4)
as
select *from RS_LS_GZ_JiNeng
where GeRen_id=@c_GeRenId
order by RiQi

之后用批处理语句调用存储过程p_Rs_Gz_JiNeng进行查询:

declare @GeRenId char(4)
select @GeRenId="0135" /*设要查询员工的个人代码为"0135" */
execute p_RsGz_JeNeng @c_GeRenId=@GeRenId

存储过程p_RsGz_JiNeng中定义了一个形参@c_GeRenId,是字符型变量。在调用该过程的批处理中,既可以用具体的值也可以用变量作为实参。用变量作实参(如本例)时,必须用del are语句加以说明。值得注意的是,在批处理的调用过程语句中,@c_GeRenId=@GeRenId中的@ c_GeRenId是存储过程p_RsGz_JiNeng中的形参名,不是批处理中的变量,所以不能将它列入d eclare语句的变量单中。

例3.如果要计算当月工资,就必须从工资历史中查出员工距离当前最近的一次技能工资变动的结果:

create procedure p_RsGz_JiNeng_Slt
(@c_GeRenId char(4),@sm_JinE smallmoney output)
as
select @sm_JinE=JinE
from RS_LS_GZ_JiNeng
where RiQi=(select max(RiQi)
from RS_LS_GZ_JiNeng
where GeRenid=@c-GeRenId)/*找出历史记录中距离当前最近的日期*/

调用存储过程p_RsGz_JiNeng_Slt进行查询:

declare @GeRenId char(4),@JinE smallmoney
select @GeRenid="0135"/*设要查询员工的个人代码为"0135"*/
select @JinE=0
execute p_RsGz_JiNeng_slt @c_GeRenId=@GeRenId,@sm_JinE=@ JinE output

这里,变量 @JinE用来存储过程形参@sm_JinE传回的金额。在调用过程语句中,@sm_JiE = @JinE output中的output不可省略。否则,变量@JinE将得不到形参传回的数值而始终为零(等于初值)。[page]

Tags:Sybase 存储 过程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接