TRIGGER со вставкой и обновлением - PullRequest
1 голос
/ 30 марта 2012

Мне нужна помощь в создании триггера на моем 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 ]

3 голосов
/ 30 марта 2012

Нет. Если вы хотите, чтобы триггер срабатывал при обновлении до 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; ​

Тем не менее, наличие двух таблиц с одним и тем же набором данных явно означает, что у вас проблема с неправильной нормализацией. Как правило, было бы гораздо лучше исправить модель данных, чем пытаться синхронизировать данные в двух таблицах с помощью триггеров.

0 голосов
/ 30 марта 2012

Как указано в комментариях от @ e-bacho 2.0, во время обновления ничего не произойдет.Вы также должны указать триггер для события after update.или добавьте ваш фактический триггер для обработки обновления

0 голосов
/ 30 марта 2012

Нет, вам нужен триггер, определенный следующим образом:

создать или заменить триггер AllowanceTrigger после вставки или обновления .....

или вы можете создать два триггера - один для вставки и один для обновления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...