我有2个触发器,它们都是行级并从触发表读取数据。我的问题是为什么其中一个(trg1)导致MUTATING触发错误而另一个(trg2)没有。为什么只有其中一个可以选择触发表?我知道自主交易的可能性。我只想了解规则何时可以从触发表中读取,何时不读取。
触发器:
CREATE OR REPLACE TRIGGER trg1
AFTER INSERT OR UPDATE
ON employees
FOR EACH ROW
DECLARE
myval NUMBER
BEGIN
SELECT COUNT (*)
INTO myval
FROM employees;
END;
CREATE OR REPLACE TRIGGER trg2
BEFORE INSERT ON tab_1
FOR EACH ROW
DECLARE
CURSOR c IS SELECT * FROM tab_1 WHERE col_1 = :NEW.col_1;
BEGIN
FOR i IN c LOOP
INSERT INTO tab_2
VALUES (:NEW.col_1, :NEW.col_2, NULL );
END LOOP;
END;
谢谢, Ť
答案 0 :(得分:0)
行级触发器只能从表中读取
因此,两个触发器都会引发ORA-04091 - 只有在尝试多行INSERT时,AFTER INSERT才会引发一个BEFORE INSERT。
尝试运行此声明:
insert into tab_1(col_1, col_2)
(select 'b', 'seven' from dual union all select 8, 'c', 'eight' from dual);
你也会得到一个ORA-04091。