外键列更新
Foreign key column update
有两个table:
tblInvestType(Parent table) and
tblInvestTypeComp(Child table)
列 tblInvestTypeComp.type_code
是引用 tblInvestType.type_code
的外键。
我如何创建触发器,以便每当 parent table 的 (tblInvestType
) type_code
列的值有任何更新时,同样反映在 child table 的 (tblInvestTypeComp
) type_code
列?
注意:所有这些都在 Oracle 中。
你可以试试下面的方法
set constraint <constraint name> deferred;
update primary key ...
update foreign key column to match the updated primary key....
commit;
为此,必须将外键定义为可延迟的
这是糟糕的设计。主键应该是不可变的。但是鉴于您有一个要求,这里有一个解决方案:
Create trigger upd_trg after update on tblInvestType
for each row
Begin
Update tblInvestTypeComp
Set type_code =:new.type_code
Where type_code =:old.type_code;
End;
这是我得到的解决方案:
create or replace trigger tblInvestType_update_type_code
after update of type_code on tblInvestType
for each row
begin
update tblInvestTypeComp
set type_code = :new.type_code
where type_code = :old.type_code;
end;
有两个table:
tblInvestType(Parent table) and
tblInvestTypeComp(Child table)
列 tblInvestTypeComp.type_code
是引用 tblInvestType.type_code
的外键。
我如何创建触发器,以便每当 parent table 的 (tblInvestType
) type_code
列的值有任何更新时,同样反映在 child table 的 (tblInvestTypeComp
) type_code
列?
注意:所有这些都在 Oracle 中。
你可以试试下面的方法
set constraint <constraint name> deferred;
update primary key ...
update foreign key column to match the updated primary key....
commit;
为此,必须将外键定义为可延迟的
这是糟糕的设计。主键应该是不可变的。但是鉴于您有一个要求,这里有一个解决方案:
Create trigger upd_trg after update on tblInvestType
for each row
Begin
Update tblInvestTypeComp
Set type_code =:new.type_code
Where type_code =:old.type_code;
End;
这是我得到的解决方案:
create or replace trigger tblInvestType_update_type_code
after update of type_code on tblInvestType
for each row
begin
update tblInvestTypeComp
set type_code = :new.type_code
where type_code = :old.type_code;
end;