Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.server -> Re: Table with trigger mutation
Hi,
You can try usual workaround for mutating table error - PL/SQL tables and after (not for each row) triggers:
SVRMGR> create table obj 2> (id integer 3> ,constraint obj_pk primary key(id) 4> );
SVRMGR> create table org 2> (id integer 3> ,constraint org_pk primary key(id) 4> ,constraint org_fk foreign key(id) references obj(id) 5> );
SVRMGR> create or replace package id_table as 2> type Tid_table is table of integer index by binary_integer; 3> org_id_table Tid_table; 4> procedure del(t in out Tid_table); 5> procedure ins(t in out Tid_table,i integer); 6> end; 7> /
SVRMGR> create or replace package body id_table as 2> procedure del(t in out Tid_table) is 3> begin 4> t.delete; 5> end; 6> procedure ins(t in out Tid_table,i integer) is 7> begin 8> t(t.count+1):=i; 9> end; 10> end; 11> /
SVRMGR> create or replace trigger org_ins 2> before insert on org 3> for each row 4> begin 5> insert into obj(id) values(:new.id); 6> end; 7> /
SVRMGR> create or replace trigger org_del1 2> before delete on org 3> begin 4> id_table.del(id_table.org_id_table); 5> end; 6> /
SVRMGR> create or replace trigger org_del2 2> after delete on org 3> for each row 4> begin 5> id_table.ins(id_table.org_id_table,:old.id); 6> end; 7> /
SVRMGR> create or replace trigger org_del3 2> after delete on org 3> begin 4> for i in 1..id_table.org_id_table.count loop 5> delete from obj where id=i; 6> end loop; 7> end; 8> /
1
1 row selected.
SVRMGR> delete from org where id=1;
1 row processed.
SVRMGR> select * from obj;
ID
Andrew Protasov
> It was, in my case, relation, that in ER-diagrams has name "Incomplete
> subtype cluster". I need in table Obj marks about not only Org
> (Organization, #Org_ID), but copies of rows from another tables (for example
> Product(#Prod_ID)). For that I use same sequence for Product and Org primary
> key fields and triggers for both tables that insert rows in Obj table by
> insertion of rows in Product and Org. And I need backward action - by
> deletion from Product or Org I need to delete row from Obj. Both tables (Org
> and Product) references to table Obj. Insert and Update triggers work
> normally. Any suggestions? "On delete cascade" clause works in Master-Detail
> direction, I need backward action (Detail-Master).
>
> Valentine
Received on Mon Dec 07 1998 - 13:37:39 CST
![]() |
![]() |