PostgreSQL存储过程调用refcursor输出失败,出现<Unnamed Portal 1>问题
使用PostgreSQL Refcursor返回数据失败的解决方法
出现<Unnamed Portal 1>通常是因为游标未正确绑定名称、未在事务上下文执行,或者客户端未正确抓取游标结果。针对你的存储过程,可按以下步骤解决:
必须在事务中执行操作
PostgreSQL的refcursor依赖事务上下文,否则游标会被自动关闭。使用以下方式调用存储过程并获取结果:BEGIN; -- 使用默认游标名称 CALL "MasterUser".s_m_userapplication('你的申请编号'); FETCH ALL IN rs_resultone; COMMIT;若要自定义游标名称:
BEGIN; CALL "MasterUser".s_m_userapplication('你的申请编号', 'custom_cursor'); FETCH ALL IN custom_cursor; COMMIT;避免匿名游标
你的存储过程已给refcursor设置默认值rs_resultone,调用时不要省略游标参数或传入空值,否则PostgreSQL会创建匿名游标,导致显示<Unnamed Portal 1>。适配客户端工具
若使用psql,需关闭自动提交或手动开启事务:\set AUTOCOMMIT off CALL "MasterUser".s_m_userapplication('你的申请编号'); FETCH ALL IN rs_resultone;验证查询逻辑
先单独执行存储过程内的查询,确认appnov1函数的返回值与v_app_no匹配,避免因查询无结果导致游标看似无数据:SELECT AM_App_ProcCD,AM_App_ProcDt FROM "MasterUser".Master_Application WHERE "MasterUser".appnov1(CAST(AM_AAPP_NO_TYPE AS INTEGER), AM_AAPP_NO_YEAR, AM_AAPP_NO_MONTH, AM_AAPP_NO_SEQ) = '你的申请编号';
内容的提问来源于stack exchange,提问作者John Carter
相关产品推荐
相关产品推荐

