首页 > 开发 > 综合 > 正文

如何在PB脚本当中获取存储过程的返回值(翻译)

2024-07-21 02:09:57
字体:
来源:转载
供稿:网友



原文:pb帮助

 

本文拟以sybase ase 10.x和11.x数据库为例,说明如何在pb脚本当中获取存储过程的返回值。作为一个存储过程,其输出的结果数据可能包括三类:select结果集、return结果、output参数。尽管输出方式众多,但pb脚本仅仅借助简单的fetch…into…语句即可全部获取这些输出数据,具体方式如下:

(一)在sybase ase 10.x和11.x数据库当中创建一个存储过程deptroster,其有一个输入参数@deptno、两个输出参数@totsal 和 @avgsal、一个return值@number_of_emps以及包含职员姓名和工资的select结果集,可见除了输入参数@deptno外,其他均为输出数据,我们需要在pb脚本中获取,具体代码如下:

 

create procedure deptroster @deptno integer,

@totsal double precision output,

       @avgsal double precision output

as

declare @number_of_emps integer

select emp_fname, emp_lname, salary from employee

       where dept_id = @deptno

select @totsal = sum(salary),

       @avgsal = avg(salary),

       @number_of_emps = count(*) from employee

       where dept_id = @deptno

return @number_of_emps;

 

(二)pb脚本当中我们需要捕获select结果集、return值和两个输出参数,其输出顺序也是按照“select结果集、return值、输出参数”顺序输出,具体代码如下:

 

integer fetchcount = 0

long    ldeptno, rc

string  fname, lname

double  dsalary, dtotsal, davgsal

ldeptno = 100

 

//此处声明存储过程名称

declare deptproc procedure for

       @rc = dbo.deptroster

       @deptno = :ldeptno,

       @totsal = 0 output,

       @avgsal = 0 output

using sqlca;

 

//此处开始执行存储过程

execute deptproc;

 

//判断执行结果

choose case sqlca.sqlcode

case 0

       //如果返回0则表示执行成功,至少存在一个select结果集

       //借助loop循环开始捕获这个select结果集

       do

              fetch deptproc into :fname, :lname, :dsalary;

              choose case sqlca.sqlcode

              case 0

                     fetchcount++

              case 100

                     messagebox ("end of result set",  &

                            string (fetchcount) " rows fetched")

              case -1

                     messagebox ("fetch failed",  &

                            string (sqlca.sqldbcode) " = "  &

sqlca.sqlerrtext)

              end choose

       loop while sqlca.sqlcode = 0

 

// 再单独执行一次fetch语句以获取return值和output参数

       fetch deptproc into :rc, :dtotsal, :davgsal;

       choose case sqlca.sqlcode

       case 0

              messagebox ("fetch return value and output"  &

                     "parms successful", "return value is: "  &

                     string (rc)  &

                     "~r~ntotal salary: " string (dtotsal)  &

                     "~r~naverage sal:  " string (davgsal))

       case 100

              messagebox ("return value and output parms"  &

                     "not found", "")

       case else

              messagebox ("fetch return value and output"  &

"parms failed", "sqldbcode is "  &

                     string (sqlca.sqldbcode) " = "  &

                     sqlca.sqlerrtext)

       end choose

 

//此处关闭存储过程

close deptproc;

case 100

 

// 如果返回100,则表示没有返回结果集.

       // 此时不需要单独执行close语句.

       messagebox ("execute successful", "no result set")

 

case else

//其他情况则表示存储过程执行失败,提示用户即可

messagebox ("execute failed",  &

              string (sqlca.sqldbcode) " = "  &

              sqlca.sqlerrtext)

 

end choose

 
至此本文结束。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表