一个表Businfo表示车辆相关信息,想做一个触发器,当修改删除创建时,将数据备份到businfo_log表中。
Create or replace trigger businfo_updateLog
Before insert or update or delete
On businfo
Begin
Insert into businfo_log(busno,typeid,lineid,companyid,mpid)
Values(busno,typeid,lineid,companyid,mpid);
end;怎么报错了?ORA-04098: 触发器 'NJGY.BUSINFO_UPDATELOG' 无效且未通过重新验证
如何解决?

解决方案 »

  1.   

    修改时有原值和新值
    删除时只有原值
    创建时只有新值原值在OLD中
    新值在NEW中你这么写当然不对
      

  2.   

    每修改一次,LOG表里都要添加一条新值。
      

  3.   

    改成两个触发器:修改时想保存原值还是新值,就放到响应的触发器里Create or replace trigger businfo_newLog 
    Before insert
    On businfo 
    Begin 
      Insert into businfo_log(busno,typeid,lineid,companyid,mpid) 
        Values(NEW.busno,NEW.typeid,NEW.lineid,NEW.companyid,NEW.mpid); 
    end; Create or replace trigger businfo_oldLog 
    Before delete
    On businfo 
    Begin 
      Insert into businfo_log(busno,typeid,lineid,companyid,mpid) 
        Values(OLD.busno,OLD.typeid,OLD.lineid,OLD.companyid,OLD.mpid); 
    end; 
      

  4.   

    Create or replace trigger businfo_updateLog 
    Before insert or update
    On businfo 
    Begin 
      Insert into businfo_log(busno,typeid,lineid,companyid,mpid) 
        Values(NEW.busno,NEW.typeid,NEW.lineid,NEW.companyid,NEW.mpid); 
    end; 
      

  5.   

    谢谢谢谢。报错 Compilation errors for TRIGGER NJGY.BUSINFO_UPDATELOGError: PL/SQL: ORA-00984: 列在此处不允许
    Line: %26
    Text: Values(NEW.busno,NEW.typeid,NEW.lineid,NEW.companyid,NEW.mpid);Error: PL/SQL: SQL Statement ignored
    Line: 5
    Text: Insert into businfo_log(busno,typeid,lineid,companyid,mpid)
      

  6.   

    你这个表是否有自增字段
    这个你得自己查查此表的字段了,方式应该和你insert into businfo时一样,对对吧