Книга: Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
Операторы управления потоком
Операторы управления потоком
PSQL содержит множество операторов, которые влияют на поток управления в кодах модулей. Только что рассмотренный оператор SUSPEND передает управление назад вызвавшей процедуре или клиентской программе, ожидая, когда только что обработанная строка будет получена из кэша строк сервера.
EXIT
В процедурах выбора и в выполняемых процедурах EXIT вызывает переход на финальный оператор END В процедуре. Он не имеет смысла в триггерах.
Поведение операторов SUSPEND, EXIT и END описано в табл. 29.2.
Таблица 29.2. Операторы SUSPEND, EXIT и END
Тип модуля |
SUSPEND |
EXIT |
END |
Процедура выбора |
Выполнение приостанавливается, пока вызвавшее приложение или процедура получает следующий набор выходных переменных |
Возвращает значения (если присутствуют) и переходит на финальный END |
Возвращает управление приложению и устанавливает SQLCODE В 100 |
Выполняемая процедура |
Переходит на финальный END - не рекомендуется |
Переходит на финальный END |
Возвращает значения и передает управление приложению |
Триггеры |
Никогда не используется |
Переходит на финальный END |
Передает управление следующему триггеру той же фазы (BEFORE или AFTER), что и у текущего, если тот существует. Иначе завершает работу триггеров этой фазы |
LEAVE
В Firebird 1.5 появился оператор LEAVE для выхода из блоков. Он заменил оператор BREAK, который был частично реализован в версии 1.0.x. Вот пример его использования в цикле WHILE нашей процедуры IS_PORK_SAFE:
WHILE (SI < 9) DO
BEGIN
SI = SI + 1; /* арифметическое выражение */
IF (SUBSTRING(SMONTH FROM 1 FOR 1) = 'R') THEN
BEGIN
RESPONSE = 'YES'; /* простая константа */
LEAVE;
END
SMONTH = SUBSTRING(SMONTH FROM 2);
/* функциональное выражение */
END
LEAVE приводит к выходу из цикла - в нашем случае останавливается проверка букв слова на символ "R". Если ветвь, содержащая оператор LEAVE, не выполняется, то выполнение продолжается до конца цикла.
EXCEPTION
Оператор EXCEPTION останавливает выполнение и передает управление первому блоку обработки исключений (блоку, начинающемуся с ключевого слова WHEN), который может обработать исключение. Если для этого исключения не найден обработчик, управление передается финальному оператору END и процедура завершается аварийно. Когда происходит такое, один или более кодов исключения передается назад клиенту через вектор состояния ошибок (массив).
Оператор EXCEPTION используется в блоке IF ... THEN ... ELSE для вызова пользовательских исключений, предварительно определенных как объекты базы данных. Сервер Firebird вызывает свои собственные исключения для SQL и контекста ошибок. Поток управления в этих случаях точно такой же, как и при вызове пользовательских исключений.
Синтаксис и техники вызова и обработки исключений описаны в главе 32.
- Основные "рычаги" управления производительностью
- Арифметические операторы
- Категорийный менеджмент. Курс управления ассортиментом в рознице
- 1.2.4. Операторы и приоритеты
- Условные операторы
- 1. Системы управления базами данных
- Поразрядные операторы
- 4.8 Методы управления Fibre Channel
- 7.9 Будущее управления хранилищами по версии ассоциации SNIA: стандарты SMI
- 15.1.3. Обработка сигналов управления заданиями
- Группа управления конфигурацией ПО
- Системные вызовы управления процессорной привязкой