INSTEAD OF TRIGGER
полезно, когда вы знаете конкретную логику для обработки DML
операции на VIEW
. Как правило, если представление содержит несколько объединений в таблицах, и мы хотим убедиться, что Oracle должен обрабатывать такие вставки / обновления в базовых таблицах представления, рекомендуется использовать такой триггер.
Вы совершаете большую ошибку, пытаясь обновить то же представление внутри Trigger
, что, как уже сказал Бен в комментариях, приводит к бесконечной рекурсии обновлений.
Я думаю, что вы на самом деле пытались обновить dept
таблицу. Итак, вы можете переписать свой Trigger
, чтобы он выглядел примерно так.
CREATE OR replace TRIGGER trig_test
INSTEAD OF UPDATE ON view_test
FOR EACH ROW
BEGIN
UPDATE dept
SET location = :NEW.location -- include other columns
WHERE dept_name = :OLD.dept_name;
END;
/
Вы также можете добавить дополнительные обновления в другие столбцы базовых таблиц.
Тогда оператор обновления, подобный вашему, будет работать, как и ожидалось.
update view_test set location ='ASIA' WHERE DEPT_NAME='HR';