[英]How do you retrieve the return value of a DB2 SQL sproc using Perl DBI?
我需要檢索由我編寫的DB2 sproc返回的值。 sproc返回表中的行數,並由調用過程用來確定是否更新其他數據。
我已經看過關於SO的幾個類似問題,但是它們涉及使用out參數而不是使用sproc的返回值,例如:
我在啟用RaiseError和PrintError的情況下使用到數據庫的標准DBI連接。
$sql_stmt = "call MY_TABLE_SPACE.MY_SPROC('2011-10-31')"; $sth = $dbh->prepare($sql_stmt) or die "Unable to prepare SQL '$sql_stmt': $rps_met_dbh->errstr"; $rsp = 0; $rsp = $sth->execute(); unless($rsp) { print(STDERR "Unable to execute sproc: $rps_met_dbh->errstr\n"); } print(STDERR "$?\n");
我試圖在$ h-> err中查找語句句柄和數據庫句柄。
如果可以的話,我真的更希望通過返回代碼而不是使用SQLSTATE機制來傳達行數。
編輯:
我已經完成使用專用的out參數來傳達更新的行數,如下所示:
$sql_stmt = "call MY_TABLE_SPACE.MY_SPROC('2011-10-31')"; $sth = $dbh->prepare($sql_stmt) or die "Unable to prepare SQL '$sql_stmt': $rps_met_dbh->errstr"; $sth = $dbh->bind_param_inout(1, $rows_updated, 128) or die "Unable to prepare SQL '$sql_stmt': $rps_met_dbh->errstr"; $rows_updated = 0; $rsp = 0; $rsp = $sth->execute(); unless($rsp) { print(STDERR "Unable to execute sproc: $rps_met_dbh->errstr\n"); } print(STDERR "$rows_updated\n");
編輯2:
現在,我進一步思考了這一點,我意識到我應該應用PragProg的“告訴。不要問”的原則。 也就是說,我不應該調用該存儲過程。 然后讓它給我回一個號碼,然后再決定是否調用該anopther sproc,即“詢問”。
我應該只調用第一個存儲過程。 並讓它決定是否應調用另一個存儲過程,即“告訴”並讓它決定。
在過程中使用輸出參數有什么問題。 我現在還沒有正在工作的DB2,或者我將提供一個示例,但是當我使用它時,我確定您可以在過程中定義輸出參數並將其與bind_param_inout綁定。 我不記得DB2過程是否可以返回值(如函數),但是如果可以使用“?=調用MY_TABLE_SPACE.MY_SPROC('2011-10-31')”它們將允許您綁定輸出返回值。 如果這不起作用,則可以使用DB2函數,該函數肯定可以返回值。 但是,歸根結底,從過程/函數中獲取數據的方法是綁定輸出參數-就是這樣。
我不知道“使用SQLSTATE”是什么意思。 我也不知道通過查看$ h-> err是什么意思,因為只有在過程失敗或您無法調用該過程(SQL錯誤等)時才設置該值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.