Момент срабатывания триггера
Синтаксис
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;