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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:30:01