解决一个触发器错误

Posted zhangruiyuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决一个触发器错误相关的知识,希望对你有一定的参考价值。

帮同事看了一个触发器引起的错误,他应项目组需求改项目报错,出现问题显示ORA-04098触发器无效且未通过重新验证。

发现他们使用navicat开发工具,打开触发器在定义一栏显示

BEGIN
<<COLUMN_SEQUENCES>>
BEGIN
IF INSERTING AND :NEW.ID IS NULL THEN
SELECT T_YW_USER_TERNIMAL_ACCOUNT_SEQ.NEXTVAL INTO :NEW.ID FROM SYS.DUAL;
END IF;
END COLUMN_SEQUENCES;
END;
CREATE OR REPLACE TRIGGER "DCMANAGEMENT"."T_YW_USER_TERNIMAL_ACCOUNT_TRG" BEFORE INSERT ON "DCMANAGEMENT"."T_YW_USER_TERNIMAL_ACCOUNT" REFERENCING OLD AS "OLD" NEW AS "NEW" FOR EACH ROW ENABLE
BEGIN
<<COLUMN_SEQUENCES>>
BEGIN
NULL;
END COLUMN_SEQUENCES;
END;

因为我不会使用navicat创建触发器。所以根据触发器提供的信息重写了触发器,用命令创建

CREATE OR REPLACE TRIGGER "DCMANAGEMENT"."T_YW_USER_TERNIMAL_ACCOUNT_TRG"
BEFORE INSERT ON "DCMANAGEMENT"."T_YW_USER_TERNIMAL_ACCOUNT" REFERENCING OLD AS "OLD" NEW AS "NEW" FOR EACH ROW ENABLE
BEGIN
IF INSERTING AND :NEW.ID IS NULL THEN
SELECT T_YW_USER_TERNIMAL_ACCOUNT_SEQ.NEXTVAL INTO :NEW.ID FROM SYS.DUAL;
END IF;END;

因为查到有人说navicat对于最后的end有换行bug,所以提到上面一行,重新执行问题解决。

以上是关于解决一个触发器错误的主要内容,如果未能解决你的问题,请参考以下文章

尝试解决 MYSQL 更新触发器的语法错误

在 Oracle PL/SQL 中创建触发器时如何解决“编译错误成功”错误?

mysql触发器应用和创建表错误代码: 1118 Row size too large. 解决

如何解决错误 1442:无法更新 mysql 中存储的函数/触发器中的表 'tb_name'?

帮助 SQL Server 触发器在插入前截断错误数据

如果出现多个错误,则将 :new 中的列用于触发器