重庆思庄Oracle、、PostgreSQL、Redhat认证学习论坛

标题: or each row触发器 [打印本页]

作者: 郑全    时间: 2014-3-26 14:23
标题: or each row触发器
create table test(id number);
create table audit_table(table_name varchar2(20),ins int,upd int,del int);

create or replace trigger test_tri
after insert or update or delete on test
declare
v_count int;
begin
      select count(*) into v_count from audit_table where table_name='TEST';
      if v_count=0 then
       insert into audit_table values( 'TEST',0,0,0);
      end if;
     case
             when insertin then
              update test set ins=ins+1 where table_name='TEST';
            when updating then
              udpate test set upd=upd+1 where table_name='TEST';
           when deleting then
               update test set del=del+1 where table_name='TEST';
        end case;
end;

begin
for i in 1..100 loop 
insert into test values(i);
end loop;
end;

select * from audit_table;
table_name        ins        upd        del
————————————————
TEST                   1             0           0


=====
alter trigger as:
=====
create or replace trigger test_tri
after insert or update or delete on test
for each row
declare
v_count int;
begin
      select count(*) into v_count from audit_table where table_name='TEST';
      if v_count=0 then
       insert into audit_table values( 'TEST',0,0,0);
      end if;
     case
             when insertin then
              update test set ins=ins+1 where table_name='TEST';
            when updating then
              udpate test set upd=upd+1 where table_name='TEST';
           when deleting then
               update test set del=del+1 where table_name='TEST';
        end case;
end;


truncate audit_table;
table has been truncated.
truncate test;
table has been truncated.

begin
for i in 1..100 loop 
insert into test values(i);
end loop;
end;


select * from audit_table;

table_name           ins        upd        del
————————————————
TEST                  100            0            0





欢迎光临 重庆思庄Oracle、、PostgreSQL、Redhat认证学习论坛 (http://bbs.cqsztech.com/) Powered by Discuz! X3.2