PostgreSQL 11 从存储过程获取结果集报游标不存在错误如何处理
问题排查与解决
根因分析
调用存储过程时你主动给INOUT参数_result_one传了值'sss',覆盖了参数默认的游标名'rs_resultone',实际打开的游标名称是sss,和后续FETCH语句指定的rs_resultone不匹配,因此触发游标不存在的报错。
两种可行调用方案
方案1:使用默认游标名调用
不传入自定义参数值,直接使用存储过程预设的默认游标名即可:
BEGIN; CALL sp_address(); FETCH ALL FROM "rs_resultone"; END;
方案2:匹配自定义游标名调用
如果需要自定义游标名称,后续FETCH语句的游标名要和传入的参数值保持一致:
BEGIN; CALL sp_address('sss'); FETCH ALL FROM "sss"; END;
补充说明
- 你编写的存储过程逻辑本身没有问题,仅需要保证传入的游标名和后续FETCH使用的名称完全匹配即可
- refcursor类型的INOUT参数在存储过程调用时,传入的字符串会直接作为游标名使用,大小写敏感需要特别注意
内容的提问来源于stack exchange,提问作者Rosh
相关产品推荐
相关产品推荐

