我在删除一条数据时将其备份至另一个结构完全一样的表,写了下面的触发器,麻烦各位大侠看看是什么问题。
create or replace trigger td_equip_fault
  before delete on equip_fault  
  for each row
declare
  -- local variables here
  ll_pkid number(8,0);
begin
  pkid  :=:old.pkid;
  
  insert into equip_fault_copy
  select * from equip_fault
  where pkid = ll_pkid;
end td_equip_fault;其中pkid是主键。

解决方案 »

  1.   

    触发器for each row 就不能select该表insert into equip_fault_copy(...) values(:old...,:old...,...);
      

  2.   

    create or replace trigger td_equip_fault 
      before delete on equip_fault  
    应该是after吧
      

  3.   

    貌似只能这么写:
    insert into equip_fault_copy values(:old.col1,:old.col2...);
      

  4.   

    for each row 的触发器所在的表不可以再被执行查询操作。
    如果必须执行这种操作的话,得转变一下使用方法。
    方案:在更新前做一个for each row的触发器,把被更新的数据主键放到另一个表(表A)里面。
          在更新后做一个表触发的触发器,这种触发器可以执行查询所在表的操作,但是因为是表触发就不能知道当前操作的数据的信息,这个时候去表A里面把主键都取出来进行你想要的操作就可以了。当然也许会有其他更好的办法,仅供参考。