Home » SQL & PL/SQL » SQL & PL/SQL » Trigger related question....
Trigger related question.... [message #28836] Mon, 26 January 2004 06:07 Go to next message
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 Go to previous message
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.
Previous Topic: UPDATE with a join.
Next Topic: trigger and sum
Goto Forum:
  


Current Time: Sun May 05 10:39:13 CDT 2024