Trigger related question.... [message #28836] |
Mon, 26 January 2004 06:07 |
Navin
Messages: 31 Registered: May 2002
|
Member |
|
|
Hi,
I want to implement a trigger, that would
capture deleted information/records on table1
as a single records in an audit table - say table2.
For example, If I delete 5 records from table1
say values are a,b,c,d and e.
I want all these 5 values to be populated in table2 as
comma seperated value a,b,c,d,e.
Thank you in advance for your replies.
Rachna
|
|
|
Re: Trigger related question.... [message #28839 is a reply to message #28836] |
Mon, 26 January 2004 08:20 |
Todd Barry
Messages: 4819 Registered: August 2001
|
Senior Member |
|
|
sql>select * from t1;
C
---------
1
2
3
4
5
6
7
8
9
10
10 rows selected.
sql>select * from t2;
no rows selected
sql>create or replace package pkg_trg
2 is
3 type array is table of t1.c%type index by pls_integer;
4 v_array array;
5
6 procedure process;
7 end;
8 /
Package created.
sql>create or replace package body pkg_trg
2 is
3 procedure process
4 is
5 v_list t2.c_list%type;
6 begin
7 for i in 1..v_array.count loop
8 v_list := v_list || v_array(i) || ',';
9 end loop;
10
11 insert into t2 values (rtrim(v_list, ','));
12 end;
13 end;
14 /
Package body created.
sql>create or replace trigger t1_bs
2 before delete on t1
3 begin
4 pkg_trg.v_array.delete;
5 end;
6 /
Trigger created.
sql>create or replace trigger t1_ar
2 after delete on t1
3 for each row
4 begin
5 pkg_trg.v_array(pkg_trg.v_array.count + 1) := :old.c;
6 end;
7 /
Trigger created.
sql>create or replace trigger t1_as
2 after delete on t1
3 begin
4 pkg_trg.process;
5 end;
6 /
Trigger created.
sql>delete from t1 where mod(c, 2) = 0;
5 rows deleted.
sql>select * from t1;
C
---------
1
3
5
7
9
5 rows selected.
sql>select * from t2;
C_LIST
--------------------------------
2,4,6,8,10
1 row selected.
sql>delete from t1 where c = 5;
1 row deleted.
sql>select * from t2;
C_LIST
--------------------------------
2,4,6,8,10
5
2 rows selected.
sql>delete from t1 where c in (7,1);
2 rows deleted.
sql>select * from t2;
C_LIST
--------------------------------
2,4,6,8,10
5
1,7
3 rows selected.
|
|
|