Как получить точное обновленное имя столбца в триггере оракула? - PullRequest
0 голосов
/ 28 октября 2018

Я собираюсь создать триггер для аудита таблицы.Предположим, что моя таблица определена, как показано ниже.

COUNTRY_ID   NOT NULL CHAR(2)      
COUNTRY_NAME          VARCHAR2(40) 
REGION_ID             NUMBER

, а моя таблица журнала создана, как показано ниже.

create table country_log(
  username varchar2(10),
  transaction_date date,
  new_value varchar(20),
  old_value varchar(20)
)

Моя половина выполненного триггера будет выглядеть следующим образом.

CREATE OR REPLACE TRIGGER tr_countryTable
AFTER UPDATE ON COUNTRIES
FOR EACH ROW
BEGIN
  insert into country_log (username,transaction_date,new_value,old_value ) values (USER, sysdate,**:New, :Old** );
END;
/

Мне нужно знать вместо сравнения значений каждого столбца в: old и: new, как получить точно обновленные новые и старые значения столбца.

1 Ответ

0 голосов
/ 29 октября 2018

В триггере UPDATE имя столбца можно указать с помощью предиката UPDATING, чтобы определить, обновляется ли указанный столбец.Давайте определим триггер следующим образом:

CREATE OR REPLACE TRIGGER tr_countryTable
AFTER UPDATE ON COUNTRIES
FOR EACH ROW
BEGIN
   IF UPDATING ('COUNTRY_NAME') THEN 
     -- :new.COUNTRY_NAME is new value
     -- :old.COUNTRY_NAME is old value
   END IF;

   IF UPDATING ('REGION_ID') THEN 
     -- :new.REGION_ID is new value
     -- :old.REGION_ID is old value
   END IF;

END;
/

Документация по триггерам Oracle 11g

...