i disabled all foreign key constarinst and tried this trigger .
trigger succesfully created .
but when i delete from grp table master table it is giving
ora-4091 table isr.grp is mutating
this basically deletes from 4 types of child tables.
CREATE or replace TRIGGER grp_delete_cascade
before DELETE ON grp
for each row
DECLARE
l_version_cd varchar2(8) ;
l_score_tbl varchar2(30) ;
l_item_ct_tbl varchar2(30) ;
l_dist_tbl varchar2(30) ;
l_c_count_tbl varchar2(30) ;
sql1 varchar2(500) ;
sql2 varchar2(500) ;
sql3 varchar2(500) ;
sql4 varchar2(500) ;
BEGIN
select distinct cd into l_version_cd from version where version_id in
( select version_id from grp where grp_id =ld.grp_id ) ;
l_score_tbl := 'SCORE_' || l_version_cd ;
l_item_ct_tbl := 'ITEM_CT_' || l_version_cd ;
l_dist_tbl := 'DIST_' || l_version_cd ;
l_c_count_tbl := 'C_COUNT_' || l_version_cd ;
sql1 := 'delete from ' || l_score_tbl || 'where ' || l_score_tbl || '.grp_id = ' ||ld.grp_id ;
sql2 := 'delete from ' || l_item_ct_tbl || 'where ' || l_score_tbl || '.grp_id = ' ||ld.grp_id ;
sql3 := 'delete from ' || l_dist_tbl || 'where ' || l_score_tbl || '.grp_id = ' ||ld.grp_id ;
sql4 := 'delete from ' || l_c_count_tbl || 'where ' || l_score_tbl || '.grp_id = ' ||ld.grp_id ;
execute immediate sql1 ;
execute immediate sql2 ;
execute immediate sql3 ;
execute immediate sql4 ;
dbms_output.put_line (' sql1: ' || sql1) ;
END;
/




ld.grp_id ) ;
Reply With Quote