Спецификация ошибочных ситуаций и действий по их обработке
Назначение
Управление обработкой ошибочных ситуаций при выполнении встроенных SQL-запросов.
Синтаксис
<управление ошибочной ситуацией>::=
EXEC SQL WHENEVER <ситуация> THEN <действие>;
<ситуация>::= {SQLERROR | SQLWARNING | NOT FOUND}
<действие>::= {STOP | CONTINUE | GOTO <метка>
| CALL <процедура-обработчик>}
Описание
-
<Метка>– метка оператора основного языка, куда необходимо перейти в случае ошибки. ДирективаWHENEVERявляется декларативной. Она управляет дальнейшей работой программы в случае выявления ошибки при выполнении SQL-запроса. ДирективаWHENEVERотносится ко всем выполняемым операторам встроенного SQL, встретившимся после нее в тексте программы до следующей директивыWHENEVER. -
Все ошибочные ситуации можно разделить на 3 категории:
-
SQLERROR(ошибка) – СУБД ЛИНТЕР не может выполнить оператор; -
SQLWARNING(предупреждение) – сомнительные преобразования типов данных и т.п.; -
NOT FOUND(данные не найдены) – не найдено ни одной записи, удовлетворяющей заданному условию.
-
-
Действия при возникновении подобных ситуаций могут быть следующими:
-
STOP– завершение выполнения программы; -
CONTINUE– ошибочная ситуация игнорируется, выполнение программы продолжается; -
GOTO– переход на заданную метку; -
CALL– вызов заданной<процедуры-обработчика>.<Процедура-обработчик>– это функция основного языка, которая не должна иметь аргументов.
-
Примечание
Если директива WHENEVER в программе отсутствует либо объявлена не в начале программы,
по умолчанию (до первого объявления WHENEVER) действует режим CONTINUE
для всех возникающих ошибочных ситуаций, то есть никакая обработка ошибки не производится. В данном случае
пользовательская программа может выполнять самостоятельную обработку ошибок, специфическую для каждого
конкретного SQL-запроса, используя значение переменных ErrPCI_ и CntPCI_.