2011-02-14 117 views
1

我在模式A和表B中的表A中模式B.更新PL/SQL触发后的用户之间的两个

架构B.Table B具有从架构A.Table A截取产品信息(这是产品简介的主要数据库)。

何时更新发生在架构A中的产品信息A.表A中,该更新应反映在架构B中。

我怎么能写触发呢?..

我的ProductID两个表

+0

模式A和B在不同的数据库中吗?如果没有这种方式复制数据没有意义。 – 2011-02-15 12:19:55

回答

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 [email protected] 
      set col1 = :new.col1, 
      col2 = :new.col2 
      where col1 = :old.col1; 

请确保您有数据库管理员通过适当补助设置做你的更新,以及您可能需要(取决于您的ENV)任何同义词。最后,如果您试图将这两个表保持为“同步”,那么请不要忘记插入和删除操作(也可以通过类似的触发器来处理)。

这是不是复制的答案,但是,这种方法应该非常谨慎地使用。

+0

我不想插入新的记录到TableB中,我想用表A中新的更新值更新它,它是否可以实现。 ? – msbyuva 2011-02-14 19:54:12