Триггерные предикаты

           

Для триггера могут быть назначены несколько условий активизации (через логическую операцию ИЛИ (OR)). В этом случае узнать, какое конкретно событие активизировало триггер, можно с помощью триггерных предикатов INSERTING, DELETING, UPDATING.

Триггерные предикаты – это предопределенные переменные, которые, в зависимости от события, принимают одно из значений TRUE или FALSE (таблица 3). С их помощью можно осуществлять различную обработку для различных событий. Например, вместо трех индивидуальных триггеров на разные события можно написать один триггер, который,f в зависимости от события, будет выполнять ту или иную операцию.

Таблица 3. Принимаемые значения триггерных предикатов
Триггерный предикатПринимаемое значение
INSERTINGTRUE, если триггер активизирован оператором INSERT, иначе – FALSE
UPDATINGTRUE, если триггер активизирован оператором UPDATE, иначе – FALSE
DELETINGTRUE, если триггер активизирован оператором DELETE, иначе – FALSE

Триггерные предикаты позволяют определить тип события, на которое сработал триггер, но не момент срабатывания триггера: до (BEFORE), после (AFTER) или вместо (INSTEAD OF) произошедшего события. Для уточнения момента срабатывания триггера используется функция sysevent() процедурного языка.

Пример

create or replace table test(ch char(10));
create or replace table result(ch char(10));

create or replace trigger t1_aaa before insert or update or delete on test for each row execute
code
  if (inserting) then
    execute "insert into result values ('inserting');"; //
  endif; //
  if (updating) then
    execute "insert into result values ('updating');"; //
  endif; //
  if (deleting) then
    execute "insert into result values ('deleting');"; //
  endif; //
  return true; //
end;

insert into test values('value 1');
update test set ch = 'value 2' where ch = 'value 1';
delete from test where ch = 'value 2';
select * from result;
CH
 --
|inserting |
|updating  |
|deleting  |