ORA-04098无效,重新验证失败

时间:2013-11-19 05:34:05

标签: sql oracle11g triggers

我编写了下面的触发器并且编译成功。

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无效且重新验证失败。

感谢任何帮助。感谢

1 个答案:

答案 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