Момент срабатывания триггера
Синтаксис
sysevent()
Описание
Функция предоставляет маску событий, которые вызвали активизацию триггера в канале с идентификатором SESSIONID (идентификатор канала передается функции неявно). Функция должна использоваться внутри тела триггера.
Возвращаемое значение
-
При использовании в хранимой процедуре всегда возвращается 0.
-
Целочисленное значение типа INT, являющееся комбинацией масок возможных событий (определение масок событий содержится в файле
global.h). Свойства масок событий приведены в таблице 10.
Таблица 10. Свойства масок событий
| Мнемоническое обозначение масок событий | Числовое значение | Причина активизации триггера |
|---|---|---|
| TRIG_INSERT | 0x00000001 | Выполнение операции INSERT |
| TRIG_UPDATE | 0x00000002 | Выполнение операции UPDATE |
| TRIG_UPDATE_OF | 0x00000004 | Выполнение операции UPDATE OF |
| TRIG_DELETE | 0x00000008 | Выполнение операции DELETE |
| TRIG_LOGON | 0x00000010 | Выполнение операции LOGON |
| TRIG_LOGOFF | 0x00000020 | Выполнение операции LOGOFF |
| TRIG_FOREACHROW | 0x00001000 | Вызов триггера для каждой строки |
| TRIG_FOREACHSTAT | 0x00002000 | Вызов триггера для всей таблицы |
| TRIG_BEFORE | 0x00010000 | Вызов триггера перед выполнением операции |
| TRIG_AFTER | 0x00020000 | Вызов триггера после выполнения операции |
| TRIG_INSTEAD | 0x00040000 | Вызов триггера вместо выполнения операции |
Пример
create or replace table i (i int );
create or replace trigger ti before insert or update or delete on i for each row execute
declare
var bi bigint;//
code
print( "begin -----------------------------------");//
print( "sessionid into procedure = "+itoa(sessionid));//
execute "select sessionid;" into bi;//
print( "sessionid from query = "+itoa(bi));//
bi := sysevent(); //
print( "sysevent = "+itoa(bi) );//
if ( ( bi & 131072 ) > 0 ) then
print( "after" );//
else
if ( ( bi & 65536 ) > 0 ) then
print( "before" );//
endif; //
endif; //
if ( ( bi & 16 ) > 0 ) then
print( "logon" );//
else
if ( ( bi & 32 ) > 0 ) then
print( "logoff" );//
endif; //
endif; //
if ( ( bi & 1 ) > 0 ) then
print( "insert" );//
else
if ( ( bi & 2 ) > 0 or ( bi & 4 ) > 0 ) then
print( "update" );//
else
if ( ( bi & 8 ) > 0 ) then
print( "delete" );//
endif; //
endif; //
endif; //
print( "end -------------------------------------");//
end;
insert into i values (1);
update i set i=2;
delete from i;
drop table i;