首页 > 解决方案 > SQL Oracle 中的触发错误

问题描述

我有一个名为“test”的表,其中有 2 列:SKTEST 和 test2

我想在表上的每个插入处增加 SKTEST 列,所以我创建了一个序列和一个触发器。

但是我的触发语句遇到了错误:

CREATE OR REPLACE TRIGGER INCRSK
BEFORE INSERT ON schema.test
FOR EACH ROW
BEGIN 
     :new.SKTEST := SK_SEQUENCES.NEXTVAL
END
/

当我想在 test2 表中的列 test2 中插入值时:

INSERT ALL
INTO schema.test (test2) values ('10')
INTO schema.test (test2) values ('20')
INTO schema.test (test2) values ('30')
SELECT * FROM dual;

我收到以下错误:

ORA-04098: 触发器 'User.INCRSK' 无效并且重新验证失败

所以我用以下句子检查了错误:

SELECT * FROM user_errors WHERE type = 'TRIGGER' AND name = 'INCRSK'

它表明了这一点:

PLS-00103:在预期以下情况之一时遇到符号“END”:。( * / ETC

编辑

感谢@Maxim Borunov 它有效!

标签: oracleplsqldatabase-trigger

解决方案


在你的触发器中 ddl 两个';' 缺少符号:

CREATE OR REPLACE TRIGGER INCRSK
BEFORE INSERT ON schema.test
FOR EACH ROW
BEGIN 
     :new.SKTEST := SK_SEQUENCES.NEXTVAL;
END;
/

推荐阅读