2011-02-14 112 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