テーブルAのトリガアクションを実行しようとしていますが、テーブルBのトリガアクションが発生していますが、次のエラーが発生しています。Oracle Apex:テーブルAのトリガからテーブルBのトリガを呼び出します。
ORA-04091: table IMIT.INFRA_ASSETS_MASTER is mutating, trigger/function may not see it
ORA-06512: at "IMIT.SUBNET_LOOKUP_DELETE_TRIGGER", line 15
ORA-04088: error during execution of trigger 'IMIT.SUBNET_LOOKUP_DELETE_TRIGGER'
ORA-06512: at "IMIT.INFRA_MASTER_DELETE_TRIGGER", line 2
ORA-04088: error during execution of trigger 'IMIT.INFRA_MASTER_DELETE_TRIGGER'
私はテーブルから項目を削除するときに、それは
CREATE OR REPLACE EDITIONABLE TRIGGER "SUBNET_LOOKUP_DELETE_TRIGGER"
before delete on subnet_lookup
for each row
declare
v_def varchar2(255);
v_link varchar2(255);
v_subnet varchar2(255);
v_sen varchar2(255);
begin
select NAME into v_def from subnet_lookup_definition where id = :old.DEF_ID;
v_sen := 'Remove Link Between ';
if :old.DEF_ID = 1 then
select hostname into v_link from servers_master where id = :old.LINK_ID;
v_sen := concat(v_sen,concat(concat('Server ''', v_link),''''));
end if;
if :old.DEF_ID = 3 then
select asset_id into v_link from infra_assets_master where id = :old.LINK_ID;
if v_link IS NULL then
select hostname into v_link from infra_assets_master where id = :old.LINK_ID;
end if;
v_sen := concat(v_sen,concat(concat('Infrastructure Assets ''', v_link),''''));
end if;
if :old.DEF_ID = 4 then
select asset_id into v_link from assets_master where id = :old.LINK_ID;
v_sen := concat(v_sen,concat(concat('IT Assets ''', v_link),''''));
end if;
select address into v_subnet from subnet where id = :old.SUBNET_ID;
v_sen := concat(concat(v_sen, concat(' to ', v_subnet)),' has been deleted');
insert into HISTORY (IT_TABLE, ITEM_ID,ACTION_TYPE, ACTION) VALUES ('SUBNET_LOOKUP',:old.SUBNET_ID,3,v_sen);
end;
その表に削除トリガーを呼び出して、別のテーブルに別のレコードを削除することになります
CREATE OR REPLACE EDITIONABLE TRIGGER "INFRA_MASTER_DELETE_TRIGGER"
before delete on infra_assets_master
for each row
begin
DELETE FROM SUBNET_LOOKUP WHERE LINK_ID = :old.ID AND DEF_ID = 3;
INSERT INTO HISTORY (IT_TABLE,ITEM_ID,ACTION_TYPE,ACTION)VALUES('INFRA_ASSETS_MASTER',:old.ID,3,CONCAT(CONCAT('Infrastructure Asset ', :old.ASSET_ID),' deleted'));
end;
このトリガーを呼び出します
問題は何か分かりません。
この問題を解決するにはどうすればよいですか?