- •Тема 4.3. Триггеры и хранимые процедуры
- •1. Триггеры и их назначение
- •2. Хранимые процедуры и их назначение
- •3. Sql для процедур и триггеров InterBase
- •3.1 Оператор присваивания
- •3.2 Оператор объявления переменных declare
- •3.3 Оператор генерации исключения
- •3.4 Оператор вызова процедуры
- •3.5 Оператор ветвления
- •3.6 Оператор цикла
- •3.7 Оператор цикла while
- •3.8 Оператор генерации события post_event
- •3.9 Операторы sql insert, update, select, delete
- •3.10 Оператор возврата значений выходных параметров suspend
- •3.11 Оператор прерывания процедуры exit
- •3.12 Оператор обработки ошибок when
- •4. Команды создания, удаления и модифиации триггеров
3.5 Оператор ветвления
Оператор ветвления IF ... THEN ... ELSE обеспечивает выполнение того или иного действия в зависимости от истинности проверяемого условия.
Синтаксис:
If (<условие>) THEN <выражение1>
[ELSE
<выражение 2>]
Если условие выполнено (значение TRUE), то выполняется оператор, следующий за конструкцией THEN, иначе выполняется оператор, следующий за конструкцией ELSE, если она присутствует.
3.6 Оператор цикла
Цикл FOR обеспечивает выполнение заданного оператора для каждой строки команды SELECT. Цикл FOR может использоваться в хранимых процедурах и триггерах.
Синтаксис:
FOR
<выражение_SELECT>
DO
<операторы>
FOR SELECT - инструкция цикла, которая отыскивает строку, указанную в <выражение_ select> и для каждой строки исполняет оператор или блок операторов, указанный после ключевого слова DO.
Конструкция <выражение_ select> представляет собой обычную команду SELECT, к которой добавлена обязательная здесь опция INTO и которая должна быть последней опцией команды SELECT.
В опции INTO перечисляются имена локальных переменных или параметров процедуры, которым присваиваются соответствующие значения выбранных командой SELECT столбцов. Имена переменных должны предваряться символом ":".
Пример.
FOR SELECT surname, name FROM student
INTO :fam, :s_name
DO
IF(fam>P1) THEN
IF(fam<P2) THEN SUSPEND;
Здесь оператор SUSPEND обеспечивает передачу вызывающему приложению данных, удовлетворяющих дополнительному условию.
3.7 Оператор цикла while
Оператор цикла WHILE обеспечивает выполнение оператора, указанного после ключевого слова DO пока указанное после WHILE условие истинно. Цикл WHILE может использоваться в хранимых процедурах и триггерах.
Синтаксис:
WHILE ( <условие>) DO
<операторы>
WHILE ... DO - оператор выполнения цикла, который повторяет оператор или блок операторов, указанных после DO, пока условие <условие> истинно. Условие проверяется в начале каждого цикла.
3.8 Оператор генерации события post_event
Оператор POST_EVENT используется для генерации события, которое может быть в дальнейшем обработано в приложениях.
Сама обработка событий в InterBase строится по следующей схеме.
1. Приложение выдает команду
EVENT INIT список_событий (имя_событияl [,имя_события2 ...]);
По этой команде создается список событий, содержащий имена событий имя_событияl , имя_события2 ...
2. То же или другое приложение выдает команду
EVENT WAIT список_событий;
По этой команде приложение приостанавливается и ожидает наступления одного из событий в списке событий.
3. Само событие генерируется внутри триггера или хранимой процедуры командой POST_EVENT. После того как такое событие произошло, приложение, ожидающее событие, получает соответствующее сообщение и продолжает свою работу. Такой механизм позволяет приложениям обрабатывать различные специфические ситуации при работе с базой данных.
Внутри триггеров и хранимых процедур реализуется только команда POST_EVENT.
Синтаксис:
POST_EVENT <имя_события>;
Параметр <имя_события> может быть либо символьным литералом в кавычках, либо строковой переменной.
Замечание! Имена переменных в хранимых процедурах не должны предваряться символом ":" нигде, кроме как в командах SELECT, INSERT, UPDATE, DELETE, что позволяет отличать их от имен столбцов.
При выполнении процедуры команда POST_EVENT сообщает диспетчеру событий о наступлении события. Диспетчер событий следит за приложениями, ждущими событий, и извещает об их наступлении.