Триггерные предикаты
Для триггера могут быть назначены несколько условий активизации (через логическую операцию ИЛИ (OR)). В этом случае узнать, какое конкретно событие активизировало триггер, можно с помощью триггерных предикатов INSERTING, DELETING, UPDATING.
Триггерные предикаты – это предопределенные переменные, которые, в зависимости от события, принимают одно из значений TRUE или FALSE (таблица 3). С их помощью можно осуществлять различную обработку для различных событий. Например, вместо трех индивидуальных триггеров на разные события можно написать один триггер, который, в зависимости от события, будет выполнять ту или иную операцию.
| Триггерный предикат | Принимаемое значение |
|---|---|
| INSERTING | TRUE, если триггер активизирован оператором INSERT, иначе – FALSE |
| UPDATING | TRUE, если триггер активизирован оператором UPDATE, иначе – FALSE |
| DELETING | TRUE, если триггер активизирован оператором 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 |