在 Python 中检索存储过程的多个结果集

当存储过程的单一调用返回多个结果集时,您可使用 ibm_db API 的 ibm_db.next_result 函数来检索这些结果集。

准备工作

必须存在由 ibm_db.exec_immediateibm_db.execute 函数返回,且具有多个结果集的语句资源。

过程

要检索多个结果集,请执行以下操作:

  1. 通过调用下列其中一个 ibm_db 访存函数,并以自变量形式传递语句资源,从该过程所返回的第一个结果集中访存行。 (该过程所返回的第一个结果集与语句资源相关联。)
    表 1。 ibm_db fetch 函数
    函数 描述
    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 的更多信息,请参阅 https://github.com/ibmdb/python-ibmdb/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 数据服务器客户机连接仍可用于下一个调用者。