You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DbVisualizer执行DB2存储过程报错-4470:结果集已关闭

DB2 LUW 存储过程在DbVisualizer中报错-4470:结果集已关闭

问题背景

  • 运行环境:SLES 12.5 (zLinux),DB2 LUW v11.5.9
  • 操作:基于现有存储过程BRL.LOONCIRCUIT_BTB修改一条动态SQL后,创建新存储过程BRL.LOONCIRCUIT_BTB_V2
  • 异常现象:
    • 在Windows 10企业版的DbVisualizer 24.1.5专业版执行新存储过程时,返回错误:

      [Code: -4470, SQL State: ] [jcc][t4][10120][10898][4.33.31] Invalid operation: result set is closed. ERRORCODE=-4470, SQLSTATE=null

    • 旧存储过程在DbVisualizer中执行正常
    • 新旧存储过程在Toad for DB2中执行均无异常

可能原因

  1. 动态SQL结果集处理逻辑不一致:修改后的动态SQL可能导致结果集提前关闭,比如动态SQL执行后未正确维护结果集打开状态,或是返回的结果集结构与旧存储过程差异较大,DbVisualizer的JCC驱动解析逻辑与Toad不同
  2. JDBC驱动版本适配问题:DbVisualizer使用的JCC驱动版本(4.33.31)与DB2 LUW v11.5.9存在兼容性问题,对新存储过程的结果集处理逻辑不兼容
  3. 存储过程结果集声明/返回流程变更:修改过程中可能误改了DYNAMIC RESULT SETS的数量,或是游标OPEN/CLOSE的处理流程与旧过程不一致

排查与修复步骤

  • 检查结果集声明:确认新存储过程CREATE PROCEDURE语句中DYNAMIC RESULT SETS的数值与旧存储过程一致,比如旧过程是DYNAMIC RESULT SETS 1,新过程是否被误修改
  • 验证动态SQL与游标逻辑:
    1. 直接在DB2命令行执行修改后的动态SQL,确认能正常返回结果集
    2. 对比新旧存储过程的游标处理代码,排查是否存在提前关闭游标、异常处理中未维护结果集状态的情况
  • 调整DbVisualizer驱动设置:
    1. 将DbVisualizer中的DB2 JDBC驱动升级到与DB2 LUW v11.5.9匹配的版本
    2. 在连接属性中尝试开启Retain Result Sets类的结果集保留选项
  • 对比DDL差异:逐行对比新旧存储过程的DDL代码,重点聚焦动态SQL块、游标声明、结果集返回逻辑,定位可能导致结果集提前关闭的代码变更

内容的提问来源于stack exchange,提问作者lazydba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 00:01:00