WHEN … DO
Обработка ошибок.
PSQL
WHEN {<error> [, <error> ...] | ANY}
DO <compound_statement>
<error> ::= {
EXCEPTION exception_name
| SQLCODE number
| GDSCODE errcode
| SQLSTATE 'sqlstate_code'
}
| Параметр | Описание |
|---|---|
exception_name |
Имя исключения. |
number |
Код ошибки SQLCODE. |
errcode |
Символическое имя ошибки GDSCODE. |
sqlstate_code |
Код ошибки SQLSTATE. |
compound_statement |
Оператор или блок операторов. |
Оператор WHEN … DO используется для обработки ошибочных ситуаций и пользовательских исключений.Оператор перехватывает все ошибки и пользовательские исключения, перечисленные после ключевого слова WHEN.Если после ключевого слова WHEN указано ключевое слово ANY, то оператор перехватывает любые ошибки и пользовательские исключения, даже если они уже были обработаны в вышестоящем WHEN блоке.
Оператор WHEN … DO должен находиться в самом конце блока операторов перед оператором END.
После ключевого слова DO следует составной оператор, в котором можно произвести обработку ошибки или исключения.Составной оператор — это оператор или блок операторов, заключённый в операторные скобки BEGIN и END.В этом операторе доступны контекстные переменные GDSCODE, SQLCODE, SQLSTATE.Для получения имени активного пользовательского исключения или текста интерпретированного сообщения об ошибке вы можете воспользоваться системной функцией RDB$ERROR.В этом же блоке доступен оператор повторного вызова ошибки или исключительной ситуации EXCEPTION (без параметров).
|
Important
|
После предложения |
Оператор WHEN … DO вызывается только в том случае, если произошло одно из указанных в его условии событий.В случае выполнения оператора (даже если в нем фактически не было выполнено никаких действий) ошибка или пользовательское исключение не прерывает и не отменяет действий триггера или хранимой процедуры, где был выдан этот оператор, работа продолжается, как если бы никаких исключительных ситуаций не было.Однако в этом случае будет отменено действие DML оператора (SELECT, INSERT, UPDATE, DELETE, MERGE), который вызвал ошибку и все ниже находящиеся операторы в том же блоке операторов не будут выполнены.
|
Important
|
Если ошибка вызвана не одним из DML операторов ( |