如何在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
至此本文結束。