create or replace trigger TR_T_DWXX after delete or update or insert ON T_DWXX for each row --单位 改变后 修改单位关系表 declare curr_dwdh number:=0 ; PRAGMA AUTONOMOUS_TRANSACTION;--开启自治事物 i number:=0; BEGIN if inserting then select t.n_sjdw into curr_dwdh from t_dwxx t where t.n_dwdh=:new.N_SJDW; loop -- 循环语句,找出当前节点上面还有几层节点,即分析当前节点是第几级 exit when curr_dwdh =99999999;--根节点就退出 INSERT INTO T_DWGX (N_DWDH,N_XJDW,N_GXJS) values (curr_dwdh,:new.N_DWDH,i); i:=i+1; select t.n_sjdw into curr_dwdh from t_dwxx t where t.n_dwdh=curr_dwdh; end loop; INSERT INTO T_DWGX (N_DWDH,N_XJDW,N_GXJS) values (:new.N_SJDW,:new.N_DWDH,i); elsif updating then delete from T_DWGX where N_XJDW=:old.n_dwdh; select t.n_sjdw into curr_dwdh from t_dwxx t where t.n_dwdh=:new.N_SJDW; loop --循环语句,找出当前节点上面还有几层节点,即分析当前节点是第几级 exit when curr_dwdh =99999999;--根节点就退出 INSERT INTO T_DWGX (N_DWDH,N_XJDW,N_GXJS) values (curr_dwdh,:new.N_DWDH,i); i:=i+1; select t.n_sjdw into curr_dwdh from t_dwxx t where t.n_dwdh=curr_dwdh; end loop; INSERT INTO T_DWGX (N_DWDH,N_XJDW,N_GXJS) values (:new.N_SJDW,:new.N_DWDH,i); elsif deleting then delete from T_DWGX where N_XJDW=:old.n_dwdh; end if; COMMIT; END;