ОПЕРАТОР ПРЕРЫВАНИЯ ПРОЦЕДУРЫ EXIT
ОПЕРАТОР ВОЗВРАТА ЗНАЧЕНИЙ ВЫХОДНЫХ ПАРАМЕТРОВ SUSPEND
Оператор SUSPEND предназначен для использования в хранимых процедурах (в триггерах SUSPEND неприменим), причем только в процедурах выбора, хотя синтаксически допустим и в выполнимых процедурах.
Оператор SUSPEND приостанавливает выполнение процедуры выбора, возвращает управление вызвавшей программе и возобновляет работу со следующей команды, когда выполнена очередная команда FETCH. SUSPEND возвращает вызвавшей программе результаты работы процедуры в выходных параметрах.
SUSPEND не должен использоваться в выполнимых процедурах, так как команды, следующие за ним, никогда не будут выполнены. В выполнимых процедурах следует использовать оператор явного выхода EXIT.
В процедуре выбора команда SUSPEND возвращает текущие значения выходных параметров вызвавшей программе и продолжает выполнение. Если какой-либо выходной параметр не получил значение явно, то его содержимое непредсказуемо, что может привести к ошибкам, поэтому процедура должна обязательно присваивать значения всем выходным параметрам перед выполнением SUSPEND.
|
|
И в процедурах выбора и в выполнимых процедурах оператор EXIT передает управление на конец процедуры (завершающий END).
Действие, выполняемое по достижении конца процедуры, зависит от ее типа:
- В процедуре выбора конечная команда END возвращает управление вызвавшему ее приложению и устанавливает SQLCODE в 100; это указывает, что список найденных ею строк закончен.
- В выполнимой процедуре конечная команда END возвращает управление вызвавшему ее приложению с установкой значений выходных параметров, если они есть.
Сводка результатов выполнения операторов SUSPEND, EXIT и END приведена в таблице.
Тип процедуры | SUSPEND | EXIT | END |
Процедура выбора | Приостанавливает работу до выполнения очередной команды FETCH и возвращает значения выходных параметров | Переходит к завершающему процедуру оператору END | Возвращает управление вызвавшему ее приложению и устанавливает SQLCODE в 100 (конец потока) |
Выполнимая процедура | Переходит к завершающему процедуру оператору END. He рекомендуется | Переходит к завершающему процедуру оператору END | Возвращает значения и передает управление вызвавшему ее приложению |
Оператор WHEN... DO обеспечивает обработку возникших ошибок. Оператор применяется в хранимых процедурах и триггерах.
Синтаксис:
WHEN {LIST_<error> / ANY} DO <compound_statement>
< error>:: {EXCEPTION errcode}
exception_name / SQLCODE number / GDSCODE
Оператор WHEN должен быть последним в блоке BEGIN...END. С его помощью процедуры и триггеры могут обрабатывать ошибки трех типов:
|
|
- Исключения, инициированные оператором EXCEPTION в данной процедуре или процедурах, прямо или косвенно вызванных данной, а также исключения, инициированные в триггерах, вызванных в результате действий этих процедур.
- SQL-ошибки, идентифицирующиеся SQLCODE.
- Ошибки, идентифицирующиеся кодами ошибок InterBase. Конструкция ANY позволяет выполнять операторы обработки при возникновении любых ошибок перечисленных типов.
Сводка синтаксиса оператора WHEN приведена в таблице.
Параметр | Описание |
EXCEPTION exception_name | Имя исключения (описанного в базе) |
SQLCODE number | Код ошибки – SQLCODE |
GDSCODE errcode | Код ошибки InterBase |
ANY | Обеспечивает вызов обработчика для любых перехватываемых ошибок |
<compound_statement> | Простой оператор или блок, осуществляющий обработку ошибок |