У меня есть триггер при удалении
Я хочу удалить полицейского, но когда я удалю его, все остальные полицейские, которые он является их боссом, будут иметь нулевое значение в поле их босса
поэтому я использовал этот код
create or replace trigger switch_boss
before delete
on policeman
for each row
declare
boss number;
begin
boss := :new.bossid;
if(:new.policemanid = :new.bossid)then
select policemanid into boss from
(select * from policeman
order by dbms_random.value)
where rownum =1;
end if;
update policeman
set bossid = boss
where bossid = :new.policemanid;
end switch_boss;
Я получил ошибку
ORA-04091: table SYSTEM.POLICEMAN is mutating, trigger/function may not see it
ORA-06512: at "SYSTEM.SWITCH_BOSS", line 13
ORA-04088: error during execution of trigger 'SYSTEM.SWITCH_BOSS'
есть идеи?
UPDATE:
Я использовал Compund Trigger его работы, но не так, как я хотел.
Я хотел назначить начальника удаленного полицейского начальником для тех, кем он был начальником.
проблема в том, что при удалении я не могу определить, какие полицейские имеют удаленного полицейского в качестве босса
Я могу найти их, потому что после удаления они имеют нулевое значение в поле, но они могут принадлежать другому удаленному полицейскому.
это триггер, который я нажал:
create or replace trigger switch_boss
for delete
on policeman
compound trigger
after statement is
cursor c is select * from policeman where bossid is null for update;
boss number;
begin
for r in c loop
select policemanid into boss from
(select * from policeman order by dbms_random.value)
where rownum =1;
update policeman
set bossid = boss
where current of c;
end loop;
end after statement;
end switch_boss;