0defb3aa

Триггеры


Создадим простую таблицу с триггером и выполним действия, представленные ниже в листинге 1:

Листинг 1

create table t2 ( id_gp number(4), id_p number(4), n2 number(4) ); insert into t2 values (1,1,1); commit;

create or replace trigger t2_bru before update of id_gp on t2 for each row -- when ( -- new.id_gp != old.id_gp --or new.id_gp is null and old.id_gp is not null --or old.id_gp is null and new.id_gp is not null -- ) begin dbms_output.put_line('Updating'); end; /

column rid new_value m_rid

select rowid rid from t2 where rownum = 1;

update t2 set id_gp = id_gp where rowid = '&m_rid';

Триггер срабатывает. То же самое происходит и с триггером after-row update. Подтверждение моего предположения, что сработает и триггер instead of оставляю читателю в качестве упражнения.

Фактически, строчный триггер before генерирует одну дополнительную запись отмены и одну дополнительную запись повторного выполнения, даже если ничего при этом не делает из-за добавления достаточно сложной конструкции when, которая в примере закомментирована. Так что, если есть выбор, немного эффективнее будет использовать строчные триггеры after.



Содержание раздела