簡體   English   中英

如何使用Perl DBI檢索DB2 SQL sproc的返回值?

[英]How do you retrieve the return value of a DB2 SQL sproc using Perl DBI?

我需要檢索由我編寫的DB2 sproc返回的值。 sproc返回表中的行數,並由調用過程用來確定是否更新其他數據。

我已經看過關於SO的幾個類似問題,但是它們涉及使用out參數而不是使用sproc的返回值,例如:

Perl Dbi和存儲過程

我在啟用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM