我需要有关在table1
上创建触发器的帮助,该触发器会将特定列从table2
插入table1
。我怎样才能做到这一点?我正在使用Oracle 11G XE。
这是我的代码:
create or replace trigger AllowanceTrigger
after insert on ex_bulacan
for each row
begin
insert into allowance (PLANT_ORIGIN,SO_NO, SO_STATUS,SO_REMARKS,DRIVER_NAME)
values (:new.plant_origin, :new.sales_order_no, :new.status,:new.remarks, :new.driver_name);
end;
如果他们更新ex_bulacan
中的数据怎么办?是否会自动更改我的allowance
表格?
答案 0 :(得分:3)
没有。如果您希望在ex_bulacan
更新时触发触发器,则需要同时定义触发器after insert
和after update
。如果您想更新allowance
表,则需要类似
create or replace trigger AllowanceTrigger
after insert or update on ex_bulacan
for each row
begin
if( inserting )
then
insert into allowance (PLANT_ORIGIN,
SO_NO,
SO_STATUS,
SO_REMARKS,
DRIVER_NAME)
values (:new.plant_origin,
:new.sales_order_no,
:new.status,
:new.remarks,
:new.driver_name);
end if;
if( updating )
then
update allowance
set plant_origin = :new.plant_origin,
so_status = :new.status,
so_remarks = :new.remarks,
driver_name = :new.driver_name
where so_no = :new.sales_order_no;
end if;
end;
也就是说,拥有两个具有相同数据集的表强烈暗示您遇到了不正确规范化的问题。修复数据模型通常要好得多,而不是试图通过触发器使两个表中的数据保持同步。
答案 1 :(得分:0)
不,你需要一个这样定义的触发器:
在插入或更新后创建或替换触发器AllowanceTrigger .....
或者您可以创建两个触发器 - 一个用于插入,另一个用于更新
答案 2 :(得分:0)
如@ e-bacho 2.0的评论所述,更新期间不会发生任何事情。
您还必须为after update
事件指定触发器。或者实施你的实际触发器以处理更新