SQL для начинающих



       

Обработка исключений



Обработка исключений

Если параметр состояния SQLSTATE не равен 00000, 00001 или 00002, значит, возникла исключительная ситуация, которую, возможно, нужно будет обработать.

  • Обработка может состоять в возвращении управления родительской процедуре, в которой была вызвана подпроцедура — источник исключения.
  • Второй способ обработки состоит в использовании предложения WHENEVER для перехода на нужную процедуру обработки или выполнения какого-либо другого действия.
  • Третий способ заключается в том, чтобы обрабатывать ситуацию прямо на месте, используя для этого составной оператор SQL. Составным называется такой SQL-оператор, который состоит из более простых операторов SQL, находящихся между ключевыми словами BEGIN (начало) и END (конец).
  • Ниже приведен пример составного оператора, выполняющего обработку исключительных ситуаций.

    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 (сигнализировать повторно). Он просто передает управление вызывающей родительской процедуре. В этой процедуре, возможно, есть дополнительный код обработки ошибок, с помощью которого можно обрабатывать исключительные ситуации, не связанные с выходом за пределы диапазона.

     



    Содержание раздела