A表结构:
NUM,NAME用触发器实现A表 update更新的时候,同时把B表的NUM,NAME 也同时更新。
但是要满足条件:就是A.num是最大的。(也就是要对A表进行SELECT查询)
触发器写在A表里面.这个触发器怎么写?

解决方案 »

  1.   

    我大概写一下,你参考修改一下!
    create trigger cascade_update
     after
     update of NUM,NAME
     on A
     for each row
    begin
     select max(NUM) as NUM,NAME from A
     update B
       set B.NUM=:new.NUM,B.NAME=:new.NAME
        where B.foreignkey=:old.foreignkey   //就是A表和B表相关联的字段,B得外键
    end;应该有些问题,呵呵!
      

  2.   

    但是要满足条件:就是A.num是最大的。(也就是要对A表进行SELECT查询)这句没明白B表根据什么去更新,是根据b.num=a.num的最大的吗
      

  3.   

    写的详细点:
    A 表结构:
    N1,P1,S1,R1,C1
    B 表结构:
    N1,P1,S1A表和B表关联的条件是:
    A.N1=B.N1 AND A.P1=B.P1比如A表UPDATE更新的时候,
    要判断一下:这条更新的数据R1和C1的值是否是A表里面最大的.
    只有满足这个条件,再去关联B表去更新B.S1.求解这个触发器,谢谢!
      

  4.   


    CREATE OR REPLACE TRIGGER TRI_TEST BEFORE UPDATE ON A FOR EACH ROW
    DECLARE
    MAXR1  NUMBER;
    MAXC1 NUMBER;
    BEGIN
    SELECT MAX(R1) INTO MAXR1 FROM A;
    SELECT MAX(C1) INTO MAXC1 FROM A;
    IF (:NEW.R1>MAXR1) AND (:NEW.C1>MAXC1) THEN
    UPDATE B
    SET B.S1=:NEW.S1
    WHERE B.N1=:NEW.N1 AND B.P1=:NEW.P1;
    END IF;END;
      

  5.   

    谢谢回答。我理解了 行级触发器不允许读触发的表,需要改为表级的触发器。
    yf520gn
      

  6.   


    应该改成after触发器吧,因为是在A表更新之后才对B进行更新的
    即是:
    CREATE OR REPLACE TRIGGER TRI_TEST AFTER UPDATE ON A FOR EACH ROW
      

  7.   

    不要带 FOR EACH ROW(行级触发器),不能再select本表