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

DataGrip执行Oracle PL/SQL触发器报PLS-00103错误如何解决

问题原因与解决方案

这个问题和触发器语法本身无关,是DataGrip执行PL/SQL块时的解析规则与配置导致的,具体原因和修复方案如下:

核心原因

  • PLS-00103报错中提到的空符号,是DataGrip解析代码时将PL/SQL块内部的;识别为语句结束标记,把完整的触发器代码拆成了多个片段执行,最终编译出的触发器不完整
  • 同时DataGrip默认没有开启/作为PL/SQL块结束分隔符的规则,而SQLWorkbench默认适配了Oracle PL/SQL的解析逻辑,所以同一段代码在SQLWorkbench可以正常编译生效

修复方案

你可以任选以下任意一种方式解决:

方式1:临时修改语句分隔符

在执行触发器代码前后手动指定分隔符规则:

-- 先将分隔符修改为/,避免拆分PL/SQL块
SET DELIMITER /
CREATE OR REPLACE TRIGGER tr_br_i_firma_id_autoinc
    BEFORE INSERT ON FIRMA
    FOR EACH ROW
WHEN(new.FIRMA_ID IS NULL)
BEGIN
    SELECT seq_firma.NEXTVAL into :new.FIRMA_ID
    FROM DUAL;
END;
/
-- 执行完成后改回默认分隔符
SET DELIMITER ;

方式2:永久调整DataGrip配置

打开当前Oracle数据源的属性设置,找到「SQL执行」分类,勾选将/作为语句分隔符,之后所有带结尾/的PL/SQL块都可以正常执行。

方式3:使用更简单的自增语法(Oracle 12c及以上适用)

如果你使用的Oracle XE版本为12c及以上,不需要额外写序列+触发器实现主键自增,直接在建表时指定IDENTITY属性即可:

CREATE TABLE FIRMA (
    FIRMA_ID NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    -- 其余字段按需补充
);

验证提示:触发器编译后可以执行SELECT * FROM USER_ERRORS WHERE NAME = 'TR_BR_I_FIRMA_ID_AUTOINC';查看编译错误详情,确认是否为解析导致的无效字符问题。

内容的提问来源于stack exchange,提问作者Michael ЯR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 16:15:01