Триггер для вставки строки данных в новую таблицу при обновлении старой таблицы - PullRequest
0 голосов
/ 28 ноября 2018

Хотите вставить только обновленную строку в таблицу журнала, но получили ошибку для следующего блока триггера:

CREATE OR REPLACE TRIGGER system_notification_audit
  AFTER INSERT OR UPDATE on ncr_system_notification
  FOR EACH ROW
BEGIN
  insert into ncr_system_notification_log
  values
    (:NEW.ID,
     :NEW.NAME,
     :NEW.Description,
     :NEW.PREFERENCE,
     :NEW.FREQUENCY,
     :NEW.IS_HIGH,
     :NEW.IS_REQUIRED,
     :NEW.UPDATED_BY,
     :NEW.UPDATED_DATE) 
   where :OLD.IS_REQUIRED <> :NEW.IS_REQUIRED;
END;

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Стандартный способ сделать это с условным условием PL / SQL:

CREATE OR REPLACE TRIGGER system_notification_audit
 AFTER 
      INSERT OR 
      UPDATE 
on ncr_system_notification
FOR EACH ROW
begin

    if :OLD.IS_REQUIRED <> :NEW.IS_REQUIRED then
        insert into ncr_system_notification_log
        VALUES (:NEW.ID , :NEW.NAME, :NEW.Description, :NEW.PREFERENCE, :NEW.FREQUENCY, :NEW.IS_HIGH, :NEW.IS_REQUIRED, :NEW.UPDATED_BY, :NEW.UPDATED_DATE) ;     
    end if ;
END;
0 голосов
/ 28 ноября 2018

Используйте insert с оператором select:

insert into ncr_system_notification_log 
select :NEW.ID , :NEW.NAME, :NEW.Description, :NEW.PREFERENCE, :NEW.FREQUENCY, 
       :NEW.IS_HIGH, :NEW.IS_REQUIRED, :NEW.UPDATED_BY, :NEW.UPDATED_DATE
  from dual
 where :OLD.IS_REQUIRED <> :NEW.IS_REQUIRED;

Предположим, IS_REQUIRED a столбец с неотрицательным целым числом , который можно обнулять, затем отрицательное значение для nvl вторым аргументом функции можно считать отрицательное целое число, например -1 в неравенстве:

where nvl(:OLD.IS_REQUIRED,-1) <> nvl(:NEW.IS_REQUIRED,-1)
...