Oracle: автоматическая дата модификации при обновлении - PullRequest
6 голосов
/ 22 июня 2011

у меня есть таблица в oracle, и я хочу изучить обновления в строках

id number,
title varchar2(10),
modify_date date

Я создал триггер для подачи модификации:

create or replace
TRIGGER schema.name_of_trigger
BEFORE UPDATE ON schema.name_of_table
FOR EACH ROW
BEGIN
    :new.modify_date := sysdate;
END;

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

update mytable a set title = (select title from mytable2 b where b.id = a.id)

Возможно ли это? я думал, что Oracle не будет обновлять поле с тем же значением

Спасибо

Ответы [ 2 ]

8 голосов
/ 22 июня 2011

Вы ошиблись, Oracle делает то, что вы приказываете делать.

Вы можете попробовать

update mytable a set title = 
      (select title from mytable2 b 
        where b.id     = a.id and 
              b.title != a.title)

или измените триггер, чтобы специально проверить другое название заголовка.

create or replace
TRIGGER schema.name_of_trigger
BEFORE UPDATE ON schema.name_of_table
FOR EACH ROW
BEGIN
--  Check for modification of title:
    if :new.title != :old.title then
       :new.modify_date := sysdate;
    end if;
END;
0 голосов
/ 09 ноября 2018
CREATE OR REPLACE TRIGGER TRG_AFT_UPD_MFD BEFORE UPDATE ON SUPER_TEST FOR EACH ROW
BEGIN
  IF :NEW.MODIFIED_ON != SYSDATE THEN
   :NEW.MODIFIED_ON := SYSDATE;
   DBMS_OUTPUT.PUT_LINE('UPDATE :'||:NEW.MODIFIED_ON);
  END IF;
END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...