DB2 10.5 for Linux, UNIX, and Windows

Python でのストアード・プロシージャーの複数の結果セットの取得 (ibm_db2)

1 回のストアード・プロシージャー呼び出しによって複数の結果セットが戻される場合、ibm_db API の ibm_db.next_result 関数を使用して結果セットを取得することができます。

始める前に

複数の結果セットを持つ ibm_db.exec_immediate または ibm_db.execute 関数によって戻されるステートメント・リソースが必要です。

手順

複数の結果セットを取得するには、次のようにします。

  1. リストされた ibm_db フェッチ関数のいずれかを呼び出すことによって、プロシージャーから戻される最初の結果セットから行をフェッチします。 その際、ステートメント・リソースを引数として渡します。 (プロシージャーから戻される最初の結果セットはステートメント・リソースに関連付けられます。)
    表 1. ibm_db フェッチ関数
    関数 説明
    ibm_db.fetch_tuple 列位置によって索引付けされた、結果セット内の 1 行を表すタプルを戻します。列には 0 から順に索引が付けられます。
    ibm_db.fetch_assoc 列名によって索引付けされた、結果セット内の 1 行を表すディクショナリーを戻します。
    ibm_db.fetch_both 列名と位置の両方によって索引付けされた、結果セット内の 1 行を表すディクショナリーを戻します。
    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 データ・サーバー・クライアント接続を引き続き使用できます。