一张表,当删除npid为0的行时,触发器就删除其它行中的 pnid ==npid为0行的nid;create table t_mc_type(
  nid number primary key,
  sname VARCHAR2(30),
  npid number
);create or replace trigger delete_mcType_tirg
  before delete on T_MC_TYPE
  for each row
  
when (old.npid=0)
declare
begin     delete from T_MC_TYPE t  where  t.npid = :old.nid;end delete_mcType_tirg;delete from t_mc_type t where t.nid=1;

解决方案 »

  1.   

    要加一下自治的事务
    create or replace trigger delete_mcType_tirg
      before delete on T_MC_TYPE
      for each row
    PRAGMA AUTONOMOUS_TRANSACTION;  --自治的事务when (old.npid=0)
    declare
    begin  delete from T_MC_TYPE t where t.npid = :old.nid;end delete_mcType_tirg;
      

  2.   

    ORA-04091 table string.string is mutating, trigger/function may not see itCause: A trigger (or a user defined PL/SQL function that is referenced in this statement) attempted to look at (or modify) a table that was in the middle of being modified by the statement which fired it.Action: Rewrite the trigger (or function) so it does not read that table.