我在插入后创建了更新oracle数据库表的触发器。
CREATE OR REPLACE TRIGGER Update_ACU
AFTER INSERT ON TBL_ACU
FOR EACH ROW
BEGIN
UPDATE TBL_ACU
SET CURRENCY = 'XXX'
WHERE ACCOUNT like '%1568';
END ;
I inserted record as
insert into TBL_ACU values('23','USD','1231568');
我得到表ORACLE Mutating触发器错误。
请帮我解决此问题。
答案 0 :(得分:0)
好吧,如果在修改该表时调用触发器,则无法从触发器修改表。这个问题有各种解决方案,包括{/ 1}}触发器和PL / SQL PACKAGE中定义的某些集合中的缓存修改,但在您的情况下,我宁愿将触发器的主体更改为:
AFTER STATEMENT
您可以在触发器内使用BEGIN
IF :NEW.ACCOUNT LIKE '%1568' THEN
:NEW.CURRENCY := 'XXX';
END IF;
END;
和:NEW
变量,相应地识别记录的 new 和 old 值。修改:OLD
记录的值将导致实际插入数据库的数据发生变化。
答案 1 :(得分:0)
最好使用BEFORE INSERT
触发器来执行此操作。
试试这个,
CREATE OR REPLACE
TRIGGER update_acu
BEFORE INSERT ON tbl_acu
FOR EACH ROW
WHEN (NEW.ACCOUNT LIKE '%1568')
BEGIN
:NEW.currency := 'XXX';
END ;