我编写了下面的触发器并且编译成功。
create or replace trigger after_update_datetable
after update on date_table
for each row
begin
if(TRUNC(:new.end_date) - TRUNC(:new.start_date) > 90) THEN
UPDATE date_table set END_DATE = :old.END_DATE, START_DATE = :old.START_DATE;
END IF;
END;
但是,当我执行以下更新语句时,我收到此错误
update date_table set end_date = sysdate,start_date = sysdate-100;
触发失败-ORA-04098无效且重新验证失败。
感谢任何帮助。感谢
答案 0 :(得分:0)
您正在从触发器更新同一个表,这是不允许的:
if(TRUNC(:new.end_date) - TRUNC(:new.start_date) > 90) THEN
UPDATE date_table set END_DATE = :old.END_DATE, START_DATE = :old.START_DATE;
END IF;
最好使用BEFORE而不是AFTER的触发器,并更新记录的值:NEW see this answer, it will be useful for you