DB2存储过程编写IF/ELSE逻辑报SQLCODE=-104错误问题求助
DB2存储过程执行报错解决方案
报错原因
你遇到的是DB2存储过程执行的分隔符冲突问题:
默认情况下SQL语句以分号;作为结束标识,但是存储过程内部的逻辑代码也大量使用分号,DBeaver会把存储过程中第一个分号识别为整条语句的结束,提前截断代码解析,就会出现找不到END IF的语法报错。
解决步骤
方法1:使用自定义分隔符指令(无需修改编辑器配置)
直接在你的SQL代码开头加一行指定分隔符的指令,DBeaver原生支持该语法,示例如下:
-- 临时修改分隔符为@ --#SET TERMINATOR @ CREATE PROCEDURE IFTEST(IN rating INTEGER, OUT res VARCHAR(1)) LANGUAGE SQL BEGIN IF rating = 1 THEN SET res = '2'; -- 后续放开该分支时注意res是VARCHAR类型,要给3加单引号避免类型报错 -- ELSE IF rating = 2 THEN -- SET res = '3'; ELSE SET res = '4'; END IF; END @ -- 执行完成后改回默认分隔符 --#SET TERMINATOR ;
方法2:修改DBeaver编辑器的分隔符配置
- 打开DBeaver的SQL编辑器,在顶部工具栏找到显示为
;的分隔符输入框 - 将其修改为
@后再执行你原来的存储过程代码,执行完成后再改回;即可
测试验证
存储过程创建成功后可以用以下语句测试效果:
-- 入参为1时返回'2' CALL IFTEST(1, ?); -- 入参非1时返回'4' CALL IFTEST(5, ?);
内容的提问来源于stack exchange,提问作者MushroomHunter
相关产品推荐
相关产品推荐

