国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

如何在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

 
至此本文結束。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吉首市| 喀喇沁旗| 临沧市| 彰化市| 建德市| 仪陇县| 武冈市| 锡林郭勒盟| 博客| 新河县| 丹阳市| 浏阳市| 新津县| 玉山县| 黄浦区| 武隆县| 远安县| 兴和县| 永善县| 平顶山市| 珲春市| 瑞安市| 土默特右旗| 武山县| 邵武市| 甘德县| 武川县| 德安县| 阳西县| 犍为县| 深圳市| 哈尔滨市| 嵊泗县| 唐海县| 高密市| 苗栗市| 鄂托克前旗| 临江市| 大田县| 漯河市| 临朐县|