create or replace trigger updateA
after update on A
for each row 
begin
  if :old.AA != :new.AA then
  begin
    update B set AA=:new.AA where id=:old.id;
  end;
  end if;  if :old.BB != :new.BB then
  begin
    update B set BB=:new.BB where id=:old.id;
  end;
  end if;
    
end;
两个表  A.(id,AA,BB)   B(id,AA,BB)  
更新A表  触发器更新B表.请教:
为什么我更新1个字段的时候可以完成.   只更新AA 或者 只 更新BB  都可以完成.
但是 如果我 一次更新2 个字段 update A set AA='11',BB='22' where id=1,  却只更新了 B 表的 AA 字段.为什么啊?该怎么写这个触发器呢. 谢谢 

解决方案 »

  1.   

    你这相触发器应该这样写好一些!
    create or replace trigger updateA 
    after update on A 
    for each row 
    begin 
      if :old.AA != :new.AA or :old.BB != :new.BB then 
      begin 
        update B set AA=:new.AA,BB=:new.BB  where id=:old.id; 
      end; 
      end if; 
    end; 只用一个update语句就好了
      

  2.   

    这样试试,注意红色的部分create or replace trigger updateA 
    after update of aa,bb on A 
    for each row 
    begin 
      if :old.AA != :new.AA then 
      begin 
        update B set AA=:new.AA where id=:old.id; 
      end; 
      end if;   if :old.BB != :new.BB then 
      begin 
        update B set BB=:new.BB where id=:old.id; 
      end; 
      end if; 
        
    end; 
      

  3.   

    如果我想把 AA 和 BB  的值加起来 然后再更新 B 的AA .
    AA 和 BB 是 字符型的.
      应该怎么转下类型呢? 转成 num 的.?谢谢了.
      

  4.   

    字符串转数字类型用TO_NUMBER,但是要注意如果字符串不是数字,如'a1'等,转换时会出错