在IBM DB2中创建存储过程报错缺失INTO子句,求修改方案
DB2存储过程创建报错解决:INTO clause missing from embedded statement
你遇到的问题是DB2与SQL Server在存储过程返回结果集的语法差异导致的:DB2中不能直接在存储过程主体里执行裸SELECT语句返回结果集,必须通过带WITH RETURN的游标来实现。
以下是修正后的存储过程代码:
CREATE PROCEDURE sp_GetMonthModelCount (in dtStart varchar(6), in dtEnd varchar(6)) RESULT SETS 1 LANGUAGE SQL -- dtStart and dtEnd must be dates of the format YYYYMM BEGIN -- 声明用于返回结果集的游标 DECLARE cur_result CURSOR WITH RETURN FOR SELECT DAMDLN, COUNT(*) AS MODEL_COUNT FROM TEST_DATA.DLRINVAPF WHERE DASTAT = 'RT' AND DADTRS BETWEEN dtStart AND dtEnd GROUP BY DAMDLN; -- 替换原DISTINCT,正确实现按型号分组统计 -- 打开游标,将结果集返回给调用方 OPEN cur_result; END
关键修改说明:
- 用
DECLARE ... CURSOR WITH RETURN FOR定义游标,WITH RETURN标识该游标用于输出结果集,与头部RESULT SETS 1对应。 - 修正原逻辑错误:将
DISTINCT改为GROUP BY DAMDLN,因为COUNT(*)是聚合函数,必须分组才能正确统计每个型号的数量。 - 简化条件:
dtStart和dtEnd已是6位格式,无需SUBSTR截取。 - 通过
OPEN cur_result触发结果集返回。
内容的提问来源于stack exchange,提问作者user153923
相关产品推荐
相关产品推荐

