Триггерные предикаты
Для триггера могут быть назначены несколько условий активизации (через логическую операцию ИЛИ (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 |