Книга: 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.217. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз