hi all.
Есть таблица myTable с триггером AFTER INSERT.
Есть таблица с точно такими же полями и именем myTable_Vers.
В триггере есть такой код:
CREATE OR REPLACE TRIGGER MYSCHEMA.TG_MYTABLE_AI
AFTER INSERT ON MYSCHEMA.MYTABLE
...
BEGIN
IF INSERTING THEN
INSERT INTO myTable_Vers SELECT * FROM myTable WHERE ID=:NEW.ID;
END IF;
...
END;
/
При попытке вставки строки в myTable происходит ошибка
ORA-04091: table MYSCHEMA.MYTABLE is mutating, trigger may not see it.
В тоже время, замена строки вставки на такую, в которой все необходимые поля присутствуют ЯВНО:
INSERT INTO myTable_Vers (ID, fld1, fld2, fld3)
VALUES (:new.ID, :new.fld1, :new.fld2, :new.fld1);
- отрабатывает нормально.
Объясните начинающему, плз, почему надо обязательно ЯВНО ПЕРЕЧИСЛЯТЬ все поля таблицы при копировании строки в другую таблицу ?
Я понимаю смысл этой ошибки: в теле триггера нельзя модифицировать таблицу, с которой происходит обработка. Но почему её нельзя ЗАПРАШИВАТЬ ?
Заранее спасибо за ответы.