2015-04-06 55 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文档和示例。