SQL Oracle中的触发错误[关闭]

Posted

技术标签:

【中文标题】SQL Oracle中的触发错误[关闭]【英文标题】:Trigger Error in SQL Oracle [closed] 【发布时间】:2018-06-22 08:01:39 【问题描述】:

我有一个名为“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 中从表 test 中插入值时:

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”:。 ( * / 等等

编辑

感谢@Maxim Borunov 它有效!

【问题讨论】:

2 个分号不存在 1) :new.SKTEST := SK_SEQUENCES.NEXTVAL; 2) 结束; 哦,好的,谢谢! 【参考方案1】:

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

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

【讨论】:

以上是关于SQL Oracle中的触发错误[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

创建 Oracle SQL 触发器错误

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

触发器中的 Oracle PL/SQL 游标

为啥在 PL/SQL Oracle 中尝试创建 INSTEAD OF 触发器时出现“错误的绑定变量”错误?

SQLFiddle 坏了吗? Oracle、SQL Server 的错误...? [关闭]

条件 old 不等于 new 的 Oracle 触发器以错误 PLS-00049、PL/SQL: ORA-00933 结束