Sybase存储过程的应用

本文介绍如何在SQL中创建及调用带有输入和输出参数的存储过程,并通过示例展示如何处理查询不到数据的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

* 建立存储过程的语法

 

CREATE PROCedure[owner.]procedurename[;number]
[[(]@parameter_name datatype[=default][OUTput]
[,@parameter_name datatype[=default][OUTput]]...[)]]

[WITH RECOMPILE]
AS SQL_statements

 

 * 调用存储过程的语法

 

[EXECute][@return-status=]
[[[server.]database.]owner.]procedurename[;number]
[[@parameter_name=]value|[@parameter_name=]@varialbe[OUTput]
[,[@parameter_name=]value|[@parameter_name=]@variable[OUTput]...]]
[WITH RECOMPILE]

 

* 例子

 

例1:建立存储过程p_RsGz_JiNeng,它有一个输入参数c_GeRenId,类型是char(4)

 

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_RsGz_JiNeng:

 

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

 

上面的代码有几个地方值得注意:

1)声明一个变量的方式: declare @variable_name type

2) 给变量赋值: select @variable_name=value。在使用变量时要在其名称前加@。

3) 调用存储过程时给输入参数赋值:execute procedure @input_para=@variable

 

例2:建立有输出参数的存储过程p_RsGz_JiNeng_Slt

 

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)/*找出历史记录中距离当前最近的日期*/

 

在定义存储过程时,对输出参数的output修饰不可或缺。在sql代码中,无需用类似return这样的语句来使参数返回。

 

调用存储过程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

 

调用存储过程的代码中,output不可省略

 

例3:查不到数据则返回错误代码

create procedure p_RsGz_JiNeng_Rtn
@c_GeRenId char(4)
as
     declare @ErrCode smallint 
     select @ErrCode=0 


     if exists(select* from RS-LS-GZ-JiNeng
                  where GeRenid=@c-GeRenId)
     begin
           select * from RS_LS_GZ_JiNeng
           where GeRen_id=@c_GeRenId
           order by RiQi


           return @ErrCode
     end 
     else
            begin
                  select @ErrCode=1
                  return @ErrCode 
            end

 

调用存储过程p_RsGz_JiNeng_Rtn:

 

declare @GeRenId char(4),@RtnCode smallint
select @GeRenId="0135"
select @RtnCode=0


execute @RtnCode=p_RsGz_JiNeng_Rtn @c_GeRenId=@GeRenId


if @RtnCode=1
     print"No this one!"

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值