现有两张表A和B,他们当中有一个字段f需要同步。当A中的f更新时,需要同步更新B中的f;
反之,当B中的f更新时,同样需要同步更新B中的f。刚一开始,我在A上建立了一个触发器t1,用于在A发生变化时更新B;
在B上同样建立了一个触发器t2,用于在B发生变化时更新A。可是这样会产生循环更新,发生死锁。对于这种同步更新的问题,还有什么好办法没有。
反之,当B中的f更新时,同样需要同步更新B中的f。刚一开始,我在A上建立了一个触发器t1,用于在A发生变化时更新B;
在B上同样建立了一个触发器t2,用于在B发生变化时更新A。可是这样会产生循环更新,发生死锁。对于这种同步更新的问题,还有什么好办法没有。
select f into v_str from B where B.id = :new.id;--假设两个表通过id关联
if (:new.f <> v_str) then
update B set B.f = :new.f;
end if;
这样的话 应该不会死循环啊
create or replace trigger ta
before update of name on a
for each row
declare
begin
if :new.flag = '0' then
update b set name = :new.name, flag = '1' where id = :new.id;
else
:new.flag := '0';
end if;
end ta;create or replace trigger tb
before update of name on b
for each row
declare
begin
if :new.flag = '0' then
update a set name = :new.name, flag = '1' where id = :new.id;
else
:new.flag := '0';
end if;
end tb;=========================================================================================
感觉有点冗余,但暂没有更好办法.