2015-04-06 60 views
0

的場景很簡單甲骨文更新有關數據輸入一個表到另一個表

CREATE TABLE one 
(ID NUMBER CONSTRAINT 
pk_id PRIMARY KEY, 
Number_of_relations INTEGER) 

CREATE TABLE two 
(mock_id NUMBER, 
CONSTRAINT fk_id FOREIGN KEY (mock_id) REFERENCES one(ID) 
text VARCHAR) 

是有可能每次進入一個新的行插入表中的兩個時間更新Number_of_relations。所以如果我在表1中輸入ID作爲'1',此時Number_of_relations爲'0',但如果我在表2中添加('1','hello')和('1','helloagain'),現在id'1'有兩個文本,但是我希望number_of_relations在表1中更新(如果可能,自動)爲'2'。有可能嗎?,提前感謝。

回答

0

這觸發做的:

create or replace trigger ins_two after insert on two 
for each row 
    update one set number_of_relations = number_of_relations + 1 
    where one.id = :new.mock_id 

測試:

insert into two values (1, 'hello'); 
insert into two values (1, 'hello again'); 
insert into two values (2, 'hello'); 

select * from one 

     ID NUMBER_OF_RELATIONS 
---------- ------------------- 
     1     2 
     2     1 

這是例如,對於INSERT操作時,您還可以添加部分的刪除和更新。 在「DELETE」情況下,number_of_relations必須遞減,「更新」中的 - 它取決於哪個列被更新,但是邏輯類似。 Triggers文檔和示例。