Момент срабатывания триггера

Синтаксис
 
sysevent()
Описание

Функция предоставляет маску событий, которые вызвали активизацию триггера в канале с идентификатором SESSIONID (идентификатор канала передается функции неявно). Функция должна использоваться внутри тела триггера.

Возвращаемое значение
  1. При использовании в хранимой процедуре всегда возвращается 0.

  2. Целочисленное значение типа INT, являющееся комбинацией масок возможных событий (определение масок событий содержится в файле global.h). Свойства масок событий приведены в таблице 10.

Таблица 10. Свойства масок событий
Мнемоническое обозначение масок событийЧисловое значениеПричина активизации триггера
TRIG_INSERT0x00000001Выполнение операции INSERT
TRIG_UPDATE0x00000002Выполнение операции UPDATE
TRIG_UPDATE_OF0x00000004Выполнение операции UPDATE OF
TRIG_DELETE0x00000008Выполнение операции DELETE
TRIG_LOGON0x00000010Выполнение операции LOGON
TRIG_LOGOFF0x00000020Выполнение операции LOGOFF
TRIG_FOREACHROW0x00001000Вызов триггера для каждой строки
TRIG_FOREACHSTAT0x00002000Вызов триггера для всей таблицы
TRIG_BEFORE0x00010000Вызов триггера перед выполнением операции
TRIG_AFTER0x00020000Вызов триггера после выполнения операции
TRIG_INSTEAD0x00040000Вызов триггера вместо выполнения операции

Пример
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;