我在模式A中有表A,在模式B中有表B.
Schema B.Table B的产品信息来自Schema A.Table A(这是产品简介的主要数据库)。
当产品更新发生在架构A.表A中的信息时,该更新应反映在架构B中。表B?
我如何为它编写触发器?..
我在两个表中都有ProductID
答案 0 :(得分:1)
为什么不创建更新之前的触发器?只有在整个事务提交时才会提交对tableB的插入。
编辑:如果你想要更新到tableB,试试这个:
--drop table testtab_a;
create table testtab_a
(
col1 varchar2(10) primary key,
col2 varchar2(10)
);
--drop table testtab_b;
create table testtab_b
(
col1 varchar2(10) primary key,
col2 varchar2(10)
);
insert into testtab_a values ('A', 'B');
insert into testtab_a values ('X', 'B');
insert into testtab_a values ('Z', 'C');
insert into testtab_b values ('A', 'B');
insert into testtab_b values ('X', 'B');
insert into testtab_b values ('Z', 'C');
CREATE OR REPLACE TRIGGER testtab_tr
BEFORE UPDATE
ON testtab_a REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
begin
update testtab_b
set col1 = :new.col1,
col2 = :new.col2
where col1 = :old.col1;
end;
select * from testtab_a;
select * from testtab_b;
update testtab_a set col2 = 'H' where col1 = 'A';
EDIT2:如果需要跨模式,可以使用dblink。
内部触发器使用:
update testtab_b@someSchema
set col1 = :new.col1,
col2 = :new.col2
where col1 = :old.col1;
确保DBA有适当的授权设置来进行更新,以及您可能需要的任何同义词(取决于您的环境)。
最后,如果您试图将这两个表保持为“同步”,那么不要忘记插入和删除(也可以通过类似的触发器处理)。
然而,这是 NOT 复制的答案,这种方法应该非常谨慎地使用。