У меня возникла проблема при обновлении столбца.У меня есть база данных с двумя таблицами, это оператор создания для таблиц:
create table trein (
trein_id number primary key,
naam varchar2(100) not null unique,
zitplekken number);
create table wagon(
wagon_id number primary key,
naam varchar2(100) not null unique,
zitplekken number not null,
trein_naam_fk varchar2(100));
Если я добавлю значение в wagon.trein_naam_fk, я хочу получить из той же строки значение zitplekken и добавить его в соответствующий train.zitplekken.Итак, я написал этот триггер для него:
CREATE OR REPLACE TRIGGER KOPPELWAGON_TRIGGER
AFTER UPDATE OF TREIN_NAAM_FK on WAGON
FOR EACH ROW
DECLARE
V_ZITPLEKKEN_W number;
V_ZITPLEKKEN_T number;
V_TREIN_NAAM varchar(100);
BEGIN
-- Haal zitplaatsen wagon op
SELECT ZITPLEKKEN, TREIN_NAAM_FK INTO V_ZITPLEKKEN_W, V_TREIN_NAAM FROM WAGON WHERE NAAM = :OLD.NAAM;
-- Verhoog zitplekken trein
UPDATE TREIN SET ZITPLEKKEN = ZITPLEKKEN + V_ZITPLEKKEN_W WHERE NAAM = V_TREIN_NAAM;
END;
/
Когда я выполняю следующую инструкцию по обновлению, я получаю сообщение об ошибке:
UPDATE WAGON SET TREIN_NAAM_FK = 't1' WHERE NAAM = 'w1';
Error starting at line : 1 in command -
UPDATE WAGON SET TREIN_NAAM_FK = 't1' WHERE NAAM = 'w1'
Error report -
ORA-04091: table RICHRAIL.WAGON is mutating, trigger/function may not see it
ORA-06512: at "RICHRAIL.KOPPELWAGON_TRIGGER", line 8
ORA-04088: error during execution of trigger 'RICHRAIL.KOPPELWAGON_TRIGGER'
Есть идеи, что я здесь не так делаю?