create table t_update_before_each_row ( txt varchar2(10) ); create table log ( txt varchar2(20) ); create trigger update_before_each_row before update on t_update_before_each_row for each row begin :new.txt := upper(:new.txt); insert into log values ('old: ' || :old.txt); insert into log values ('new: ' || :new.txt); end update_before_each_row; /
insert into t_update_before_each_row values('one');
insert into t_update_before_each_row values('two');
insert into t_update_before_each_row values('three');
insert into t_update_before_each_row values('four');
update t_update_before_each_row set txt = txt || txt where substr(txt,1,1) = 't';
select * from t_update_before_each_row;
one TWOTWO THREETHREE four
select * from log;
old: two new: TWOTWO old: three new: THREETHREE
drop table t_update_before_each_row; drop table log;
create table t_update_after_each_row (
txt varchar2(10)
);
create table log (
txt varchar2(20)
);
create trigger update_after_each_row after update on t_update_after_each_row for each row begin
-- :new.txt := upper(:old.txt); -- ORA-04084: cannot change NEW values for this trigger type
insert into log values ('old: ' || :old.txt);
insert into log values ('new: ' || :new.txt);
end update_after_each_row;
/
insert into t_update_after_each_row values('one');
insert into t_update_after_each_row values('two');
insert into t_update_after_each_row values('three');
insert into t_update_after_each_row values('four');
update t_update_after_each_row set txt = txt || txt where substr(txt,1,1) = 't';
select * from t_update_after_each_row;
one twotwo threethree four
select * from log;
old: two new: twotwo old: three new: threethree
drop table t_update_after_each_row; drop table log;
create table t_update_before (
txt varchar2(10)
);
create table log (
txt varchar2(20)
);
create trigger update_before
before update on t_update_before
begin
-- :new.txt := upper(:old.txt); -- ORA-04082 insert into log values ('update trigger');
end update_before;
/
insert into t_update_before values('one');
insert into t_update_before values('two');
insert into t_update_before values('three');
insert into t_update_before values('four');
update t_update_before set txt = txt || txt where substr(txt,1,1) = 't';
select * from t_update_before;
one twotwo threethree four
select * from log;
update trigger
update t_update_before set txt = txt || txt where txt = 'no update';
select * from log;
update trigger update trigger
drop table t_update_before; drop table log;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29424472/viewspace-1269482/ ,如需转载,请注明出处,否则将追究法律责任。