我大概写一下,你参考修改一下! 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;应该有些问题,呵呵!
写的详细点: 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.求解这个触发器,谢谢!
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;
谢谢回答。我理解了 行级触发器不允许读触发的表,需要改为表级的触发器。 yf520gn
应该改成after触发器吧,因为是在A表更新之后才对B进行更新的 即是: CREATE OR REPLACE TRIGGER TRI_TEST AFTER UPDATE ON A FOR EACH ROW
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;应该有些问题,呵呵!
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.求解这个触发器,谢谢!
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;
yf520gn
应该改成after触发器吧,因为是在A表更新之后才对B进行更新的
即是:
CREATE OR REPLACE TRIGGER TRI_TEST AFTER UPDATE ON A FOR EACH ROW