sybase-存储过程

IF OBJECT_ID ( 'dbo.kc_sp_user_func_get' ) IS NOT NULL
BEGIN
    DROP PROCEDURE dbo.kc_sp_user_func_get
    IF OBJECT_ID ( 'dbo.kc_sp_user_func_get' ) IS NOT NULL
        PRINT '<<< FAILED DROPPING PROCEDURE dbo.kc_sp_user_func_get >>>'
    ELSE
        PRINT '<<< DROPPED PROCEDURE dbo.kc_sp_user_func_get >>>'
END
go
CREATE PROCEDURE dbo.kc_sp_user_func_get
    @user_id int ,
    @get_mode int ,
    @my_result int output
AS
    BEGIN
        if (@get_mode = 1)
        begin
            select b.subfunc_id
            from cb_tb_cfg_user_role a, cb_tb_cfg_role_func b
            where a. user_id = @user_id and a.role_id = b.role_id
            order by b.subfunc_id
            select @my_result = 0
        end
    END
go
IF OBJECT_ID ( 'dbo.kc_sp_user_func_get' ) IS NOT NULL
    PRINT '<<< CREATED PROCEDURE dbo.kc_sp_user_func_get >>>'
ELSE
    PRINT '<<< FAILED CREATING PROCEDURE dbo.kc_sp_user_func_get >>>'
go
EXEC sp_procxmode 'dbo.kc_sp_user_func_get' , 'unchained'
go
 
 
------------------
双击代码全选
1
2
3
4
5
  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进行查询: 

双击代码全选
1
2
3
  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.如果要计算当月工资,就必须从工资历史中查出员工距离当前最近的一次技能工资变动的结果: 

双击代码全选
1
2
3
4
5
6
7
8
  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进行查询: 

双击代码全选
1
2
3
4
  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]

  例4.查到了个人代码为"0135"员工的技能工资就显示其历史纪录,查不到则显示一条出错信息。 

双击代码全选
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  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 
     whrer GeRen_id=@c_GeRenId 
     order by RiQi 
     return @ErrCode 
   end 
   esle 
   begin 
     select @ErrCode=1 
     return @ErrCode 
   end 

  调用存储过程p_RsGz_JiNeng_Rtn: 

双击代码全选
1
2
3
4
5
6
  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!" 
 
 
http://seawomen.iteye.com/blog/625303

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17066567/viewspace-760073/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/17066567/viewspace-760073/

你可能感兴趣的:(sybase-存储过程)