oracle:一个update修改两张表

需求:用一个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:对表的每一行触发器执行一次。如果没有这一选项,即使变更多行则只对整个表执行一次。

猜你喜欢

转载自blog.csdn.net/u012060033/article/details/83792752
今日推荐