1 回のストアード・プロシージャー呼び出しによって複数の結果セットが戻される場合、ibm_db API の ibm_db.next_result 関数を使用して結果セットを取得することができます。
始める前に
複数の結果セットを持つ
ibm_db.exec_immediate または
ibm_db.execute 関数によって戻されるステートメント・リソースが必要です。
手順
複数の結果セットを取得するには、次のようにします。
- リストされた 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 |
次の行または要求された行への結果セット・ポインターを設定します。 この関数を使用して、結果セットを繰り返して取り出します。 |
- 最初のステートメント・リソースを 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 データ・サーバー・クライアント接続を引き続き使用できます。