需求:用一个update语句修改两张表?
思路:用触发器来解决
触发器代码:
表a:table_a,表b:table_b,其中表b里面有表a的id,这个触发器意思是当修改表a的最后修改人:table_a_last_chg_usr时,让表b的最后修改人字段也跟着修改table_b_last_chg_usr
create or replace trigger
table_a_demo after update
on table_a
for each row
begin
update table_b set table_b_last_chg_usr = :new.table_a_last_chg_usr where table_a_id = :old.table_a_id;
end ;
要执行的修改表a的语句:
update table_a a set a.last_chg_usr='testDemo' where a.table_a_id ='101'
知识点补充:
new关键字和old关键字:
------最佳解决方案--------------------
oracle默认的 用old代表老数据 new代表新数据 不过二者在使用时是有限制的
insert时 只有:new 没有:old
delete时 只有:old 没有:new
update时 二者都可用
------其他解决方案--------------------
:new --为一个引用最新的列值;
:old --为一个引用以前的列值;
这两个变量只有在使用了关键字 "FOR EACH ROW"时才存在.且update语句两个都有,而insert只有:new ,delect 只有:old;
for each row:对表的每一行触发器执行一次。如果没有这一选项,即使变更多行则只对整个表执行一次。