Спецификация ошибочных ситуаций и действий по их обработке
Назначение
Управление обработкой ошибочных ситуаций при выполнении встроенных 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_
.