Как решить ошибку триггера Oracle DB?

Я написал триггер БД для отслеживания действия вставки. После вставки новой записи я хотел бы автоматически установить CREATION_DATE на sysdate.

Я получаю сообщение об ошибке, когда хочу вставить новую запись:

ошибка
ORA-04091: таблица REPORT мутирует, триггер / функция может не видеть ее
ORA-06512: в «CREATION_DATE_TEST», строка 2
ORA-04088: ошибка во время выполнения триггера «CREATION_DATE_TEST»

Мой код:

 CREATE OR REPLACE TRIGGER creation_date_test 
 AFTER INSERT ON REPORT FOR EACH ROW 
 BEGIN  
   UPDATE REPORT set CREATION_DATE = sysdate
   WHERE ROWID = :new.ROWID;
 END;

Еще пробовал заменить ROWID = :new.ROWID на PROJECT_ID = new.PROJECT_ID. Выдает ту же ошибку.


person de li    schedule 02.09.2016    source источник


Ответы (1)


Похоже, вам просто нужен триггер перед вставкой, который устанавливает :new.creation_date

create or replace trigger creation_date_test
  before insert on report
  for each row
begin
  :new.creation_date := sysdate;
end;
person Justin Cave    schedule 02.09.2016
comment
Большое спасибо! Ваш ответ очень полезен !! - person de li; 02.09.2016
comment
@deli - creation_date varchar2, а не date, как следует из названия? Я бы не ожидал, что в опубликованном мной коде будут использоваться какие-либо строки. - person Justin Cave; 02.09.2016
comment
Я изменил тип данных сейчас. Спасибо !! - person de li; 02.09.2016