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

       

Действие и эффект обработчика



Действие и эффект обработчика

Как только возникает состояние, вызывающее соответствующий обработчик, выполняется действие, определенное этим обработчиком. Такое действие может быть простой или составной командой SQL. После успешного выполнения обработчика выполняется некоторое последействие, называемое эффектом. Ниже представлен список трех возможных эффектов обработчика.

  • CONTINUE. Выполнение команды, следующей после команды, инициировавшей действие обработчика.
  • EXIT. Выход из составной команды, содержащей обработчик, и выполнение следующей команды.
  • UNDO. Отмена всех предыдущих команд составной и выполнение следующей команды.
  • Эффект CONTINUE лучше всего применять в том случае, если обработчик способен устранить любую проблему, вызвавшую его. Эффект EXIT применяется, если обработчику не под силу исправить проблему, но нет необходимости отменять изменения, сделанные составной командой. Эффект UNDO позволяет вернуться в состояние до выполнения составной команды. Рассмотрим следующий пример:

        BEGIN ATOMIC

            DECLARE constraint_violation CONDITION

                FOR SQLSTATE VALUE '23000' ;

            DECLARE UNDO HANDLER

                FOR constraint_violation

    RESIGNAL ;

            INSERT INTO students (StudentID, Fname, Lname)

                VALUES (:sid, sfname, :slname) ;

            INSERT INTO roster (ClassID, Class, StudentID)

                VALUES (:sid, cname, :sid) ;

        END ;

    Если выполнение какой-либо из двух команд INSERT вызывает нарушение некоторого ограничения, например, в результате добавления записи с первичным ключом, уже присутствующим в таблице, в параметр SQLSTATE помещается значение 23000 и возникает состояние constraint_violation. Обработчик такого события отменяет изменения, внесенные в таблицы командами INSERT. Команда RESIGNAL возвращает управление процедуре, вызвавшей процедуру обработчика.

    После успешного выполнения обеих команд INSERT следующей выполняется команда за ключевым словом END.

    Помни: Ключевое слово ATOMIC является обязательным в случае эффекта UNDO. Это не распространяется на обработчики с эффектами CONTINUE или EXIT.



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