Обработка исключений
Обработка исключений
Если параметр состояния SQLSTATE не равен 00000, 00001 или 00002, значит, возникла исключительная ситуация, которую, возможно, нужно будет обработать.
Ниже приведен пример составного оператора, выполняющего обработку исключительных ситуаций.
BEGIN
DECLARE ValueOutOfRange EXCEPTION FOR SQLSTATE '73003' ;
INSERT INTO FOODS
(Calories)
VALUES
(:cal)
SIGNAL ValueOutOfRange ;
MESSAGE 'Обрабатывается новое значение количества калорий'
EXCEPTION
WHEN ValueOutOfRange THEN
MESSAGE 'Обработка ошибки выхода количества калорий за допустимый диапазон' ;
WHEN OTHERS THEN
RESIGNAL ;
END
С помощью одного или нескольких объявлений можно задать имена для всех возможных значений параметра SQLSTATE. Одним из операторов, которые могут вызвать исключительную ситуацию, является INSERT. Если значение :cal превысит максимальное значение элемента данных типа SMALLINT, параметру SQLSTATE будет присвоено значение '73003'. Сигнал о возникновении исключительной ситуации подает оператор SIGNAL (сигнализировать). Этот оператор очищает область диагностики, а также присваивает полю RETURNED_SQLSTATE этой области значение параметра SQLSTATE. Если исключения не было, выполняется обычная последовательность операторов, роль которой в нашем примере играет MESSAGE 'Обрабатывается новое значение количества калорий1. Если же это исключение все же имело место, то обычная последовательность пропускается и выполняется оператор EXCEPTION.
Как только возникает исключение ValueOutOfRange (значение вне диапазона), выполняется последовательность операторов, представленных в нашем примере одним — MESSAGE 'Обработка ошибки выхода количества калорий за допустимый диапазон'. Когда возникнет какое-либо другое исключение, выполняется оператор RESIGNAL (сигнализировать повторно). Он просто передает управление вызывающей родительской процедуре. В этой процедуре, возможно, есть дополнительный код обработки ошибок, с помощью которого можно обрабатывать исключительные ситуации, не связанные с выходом за пределы диапазона.