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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:06:03