TRIGGER具有INSERT和UPDATE

时间:2012-03-30 02:32:23

标签: sql oracle11g oracle-apex plsqldeveloper

我需要有关在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表格?

3 个答案:

答案 0 :(得分:3)

没有。如果您希望在ex_bulacan更新时触发触发器,则需要同时定义触发器after insertafter 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事件指定触发器。或者实施你的实际触发器以处理更新

相关问题