在 Python 中從儲存程序擷取多個結果集

當對儲存程序的單一呼叫傳回多個結果集時,您可以使用 ibm_db API 的 ibm_db.next_result 函數來擷取結果集。

開始之前

您必須具有由具有多個結果集的 ibm_db.exec_immediateibm_db.execute 函數傳回的陳述式資源。

程序

如果要擷取多個結果集,請執行下列動作:

  1. 透過呼叫其中一個列出的 ibm_db 提取函數,並傳遞陳述式資源作為引數,從程序傳回的第一個結果集提取列。 (從程序傳回的第一個結果集與陳述式資源相關聯。)
    表 1. ibm_db 提取函數
    功能 說明
    ibm_db.fetch_tuple 傳回值組 (依直欄位置編製索引) ,代表結果集中的列。 直欄是 0-已編製索引。
    ibm_db.fetch_assoc 傳回依直欄名稱編製索引的字典,代表結果集中的一列。
    ibm_db.fetch_both 傳回依直欄名稱和位置來編製索引的字典,代表結果集中的列。
    ibm_db.fetch_row 將結果集指標設為下一列或所要求的列。 使用此函數來反覆運算結果集。
  2. 將原始陳述式資源作為第一個引數傳遞至 ibm_db.next_result 函數,以擷取後續的結果集。 您可以從陳述式資源提取列,直到結果集中沒有其他可用的列為止。

    當沒有其他結果集可用時,或程序未傳回結果集時, ibm_db.next_result 函數會傳回 False。

    如需 ibm_db API 的相關資訊,請參閱 http://code.google.com/p/ibm-db/wiki/APIs

範例

從儲存程序擷取多個結果集。

import ibm_db
conn = ibm_db.connect( "sample", "user", "password" )
if conn:
    sql = 'CALL sp_multi()'
    stmt = ibm_db.exec_immediate(conn, sql)
    row = ibm_db.fetch_assoc(stmt)
    while row != False :
        print "The value returned : ", row
        row = ibm_db.fetch_assoc(stmt)
    
    stmt1 = ibm_db.next_result(stmt)
    while stmt1 != False:
        row = ibm_db.fetch_assoc(stmt1)
        while row != False :
            print "The value returned : ", row
            row = ibm_db.fetch_assoc(stmt1)
        stmt1 = ibm_db.next_result(stmt)

下一步

當您準備好關閉與資料庫的連線時,請呼叫 ibm_db.close 函數。 如果您嘗試關閉您使用 ibm_db.pconnect所建立的持續連線,則關閉要求會傳回 True ,且 IBM Data Server Client 連線仍可供下一個呼叫程式使用。