Ожидание события
Функция
Определение оператора ожидания события.
Спецификация
::=
Синтаксические правила
-
< Выражение-событие >
должно состоять из имен событий, логических условийAND
,OR
,NOT
и группировочных скобок.create event EVN1 as delete, insert on tab1; create event EVN2 as update on tab2 create event EVN3 as select * from tab3; wait event (EVN1 and EVN3) or (EVN2 and EVN3);
-
Если модификатор
NOT
не указан, то происходит ожидание до тех пор, пока заданная в< выражении-событии >
комбинация событий даст значениеTRUE
. -
Если модификатор
NOT
указан, то происходит ожидание до тех пор, пока заданная в< выражении-событии >
комбинация событий даст значениеFALSE
. -
Если в
< выражении-событии >
задано событие, которое к моменту выполненияWAIT EVENT
уничтожено другим каналом, фиксируется исключительная ситуация.
Общие правила
-
Если результат вычисления
< выражения-события > TRUE
, управление передается в программу, ожидающую комбинацию указанных событий. Сами события при этом из очереди не удаляются. -
Информация о том, какое именно событие наступило в
< выражении-событии >
, возвращается в битовой маске (полеROWID
блока управления запросомCBL
) (см. документ «Интерфейс нижнего уровня», пункт «Выполнение SQL-запроса») или в переменнойROWIDPCI_
(см. документ «Встроенный SQL», подраздел «Псевдопеременные встроенного языка»). Каждый бит маски (начиная с нулевого) соответствует порядковому номеру события в< выражении-событии >
. Значение бита 1 – событие наступило. -
Битовая маска событий может содержать информацию не более чем о 32 событиях из
< выражения-события >
, для остальных (с порядковыми номерами больше 32) информация о состоянии события через битовую маску недоступна. -
Максимальное количество допустимых событий для команды WAIT EVENT определяется количеством доступных каналов ядра СУБД ЛИНТЕР, т.к. на каждое событие в ядре СУБД открывается отдельный канал.
-
Если количество событий больше 32 (максимальный размер битовой маски), то в случае наступления запрошенной комбинации событий ядро СУБД все равно вернет управление пользовательскому приложению, но чтобы узнать, какое именно событие произошло, необходимо опрашивать интересуемые события отдельно. Также отдельный опрос событий надо выполнять, если среди них есть события типа AUTORESET.