DB2简单存储过程声明WITH RETURN游标报SQL0628错误的解决方案问询
报错核心原因
WITH RETURN 游标属性不支持在匿名动态复合语句(即独立运行的 BEGIN...END 块)中使用,该属性仅允许在持久化存储过程、用户定义函数的静态定义中声明。
可落地解决方案
方案1:将游标逻辑封装到正式存储过程中
需要向调用方返回结果集时用标准写法,存储过程属于静态定义对象,内部声明的带WITH RETURN游标不会被判定为动态语句,示例代码如下:
CREATE OR REPLACE PROCEDURE GET_TABLE1_DATA() DYNAMIC RESULT SETS 1 -- 声明要返回的结果集数量,和游标数量对应 LANGUAGE SQL BEGIN DECLARE rs1 CURSOR WITH RETURN FOR SELECT * FROM table1; OPEN rs1; -- 打开游标后结果集自动返回给调用方 END;
调用存储过程即可获取结果集:
CALL GET_TABLE1_DATA();
方案2:匿名块场景去掉WITH RETURN属性
如果只是在匿名块内处理游标逻辑、不需要向块外返回结果集,直接删除WITH RETURN属性即可正常运行,示例如下:
BEGIN DECLARE rs1 CURSOR FOR SELECT * FROM table1; -- 后续在块内补充打开游标、FETCH、关闭游标的处理逻辑即可 END;
方案3:匿名块直接返回结果集
如果使用的是IBM i 7.3及以上版本,匿名块不需要声明游标,直接写SELECT语句即可返回结果集:
BEGIN SELECT * FROM table1; END;
内容的提问来源于stack exchange,提问作者AzarShah
相关产品推荐
相关产品推荐

