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中执行均无异常
- 在Windows 10企业版的DbVisualizer 24.1.5专业版执行新存储过程时,返回错误:
可能原因
- 动态SQL结果集处理逻辑不一致:修改后的动态SQL可能导致结果集提前关闭,比如动态SQL执行后未正确维护结果集打开状态,或是返回的结果集结构与旧存储过程差异较大,DbVisualizer的JCC驱动解析逻辑与Toad不同
- JDBC驱动版本适配问题:DbVisualizer使用的JCC驱动版本(4.33.31)与DB2 LUW v11.5.9存在兼容性问题,对新存储过程的结果集处理逻辑不兼容
- 存储过程结果集声明/返回流程变更:修改过程中可能误改了
DYNAMIC RESULT SETS的数量,或是游标OPEN/CLOSE的处理流程与旧过程不一致
排查与修复步骤
- 检查结果集声明:确认新存储过程
CREATE PROCEDURE语句中DYNAMIC RESULT SETS的数值与旧存储过程一致,比如旧过程是DYNAMIC RESULT SETS 1,新过程是否被误修改 - 验证动态SQL与游标逻辑:
- 直接在DB2命令行执行修改后的动态SQL,确认能正常返回结果集
- 对比新旧存储过程的游标处理代码,排查是否存在提前关闭游标、异常处理中未维护结果集状态的情况
- 调整DbVisualizer驱动设置:
- 将DbVisualizer中的DB2 JDBC驱动升级到与DB2 LUW v11.5.9匹配的版本
- 在连接属性中尝试开启
Retain Result Sets类的结果集保留选项
- 对比DDL差异:逐行对比新旧存储过程的DDL代码,重点聚焦动态SQL块、游标声明、结果集返回逻辑,定位可能导致结果集提前关闭的代码变更
内容的提问来源于stack exchange,提问作者lazydba
相关产品推荐
相关产品推荐

