Search notes:

Oracle: Simple DML triggers

create table tq84_trigger_test_tab (
   val  number(5,2) unique
);

create table tq84_trigger_log (
   id  integer generated always as identity primary key,
   msg  varchar2(4000)
);

create or replace procedure tq84_trigger_log_ins(msg varchar2)
   authid definer
as
   pragma autonomous_transaction;
begin
   insert into tq84_trigger_log(msg) values (msg);
   commit;
end;
/

create or replace trigger tq84_trigger_before_for_each_row
   before insert or update or delete on tq84_trigger_test_tab
   for each row
begin
  tq84_trigger_log_ins('before, old.val = ' || :old.val || ', new.val = ' || :new.val);
end;
/

create or replace trigger tq84_trigger_after_for_each_row
   after insert or update or delete on tq84_trigger_test_tab
   for each row
begin
   tq84_trigger_log_ins('after, old.val = ' || :old.val || ', new.val = ' || :new.val);
end;
/

create or replace trigger tq84_trigger_before_statement
   before insert or update or delete on tq84_trigger_test_tab
-- for each row
begin
  tq84_trigger_log_ins('Before statement');
end;
/

create or replace trigger tq84_trigger_after_statement
   after insert or update or delete on tq84_trigger_test_tab
-- for each row
begin
  tq84_trigger_log_ins('After statement');
end;
/

insert into tq84_trigger_test_tab (val) values (1.1);
insert into tq84_trigger_test_tab (val) values (2.2);
update tq84_trigger_test_tab set val = 3.3 where val = 1.1;
delete from tq84_trigger_test_tab  where val = 3.3;

insert into tq84_trigger_test_tab (val) values (2.2);
insert into tq84_trigger_test_tab (val) values (5.5);

select msg from tq84_trigger_log order by id;

select
   trg.trigger_name,
   trg.trigger_type,
   trg.triggering_event,
   trg.*
from user_triggers trg
where
   trg.table_owner = user and
   trg.table_name  = 'TQ84_TRIGGER_TEST_TAB';

drop procedcure tq84_trigger_log_ins
drop table      tq84_trigger_test_tab;
drop table      tq84_trigger_log;

See also

Triggers

Index