尝试创建我的第一个 oracle 触发器时出现问题
Posted
技术标签:
【中文标题】尝试创建我的第一个 oracle 触发器时出现问题【英文标题】:Issue trying to create my first oracle trigger 【发布时间】:2015-12-22 17:07:54 【问题描述】:我正在尝试在插入或更新记录时创建触发器,其中 TESTGROUP == 'HSSAG' 将为 TESTGROUP 'HSBEJ' 创建该记录的副本.....并且当记录如果 HSSAG 已更新,则相关的 HSBEJ 记录将随之更新。
create or replace TRIGGER VAL_TESTTYPE_CLONING
AFTER DELETE OR INSERT OR UPDATE OF TESTGROUP ON CLONING_TABLE
FOR EACH ROW
WHEN (new.TESTGROUP = 'HSSAG')
BEGIN
INSERT INTO CLONING_TABLE (TESTCOL, TESTGROUP) VALUES(:new.TESTCOL, 'HSBEJ');
END;
这是我尝试插入时遇到的错误
INSERT INTO "CLMSDBA"."CLONING_TABLE" (TESTCOL, TESTGROUP) VALUES ('3', 'HSSAG')
ORA-04091: table CLMSDBA.CLONING_TABLE is mutating, trigger/function may not see it
ORA-06512: at "CLMSDBA.VAL_TESTTYPE_CLONING", line 2
ORA-04088: error during execution of trigger 'CLMSDBA.VAL_TESTTYPE_CLONING'
ORA-06512: at line 1
One error saving changes to table "CLMSDBA"."CLONING_TABLE":
Row 3: ORA-04091: table CLMSDBA.CLONING_TABLE is mutating, trigger/function may not see it
ORA-06512: at "CLMSDBA.VAL_TESTTYPE_CLONING", line 2
ORA-04088: error during execution of trigger 'CLMSDBA.VAL_TESTTYPE_CLONING'
ORA-06512: at line 1
【问题讨论】:
表 VAL_TESTTYPE 是否有一个名为 TESTCOL 的列? (而不是例如“TestCol”?):new.TESTCOL
=> :new.TESTGROUP
,假设两张表有相同的列。
:新的,什么时候没有新的
对不起,我刚刚发布后发现表和列名有一些错误,我更正了,然后又出现一个对我来说没有意义的错误。
你不能插入到 triiger 中的同一个表中,如果你想替换一些值,只需使用 :new.col_name = ...
【参考方案1】:
我找到了一个很好的解决方法来改变触发器问题。希望这个 有帮助。
Mutating trigger workaround
【讨论】:
以上是关于尝试创建我的第一个 oracle 触发器时出现问题的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 ORACLE 获取工作日列表时出现 ORA-00904