Действие и эффект обработчика
Действие и эффект обработчика
Как только возникает состояние, вызывающее соответствующий обработчик, выполняется действие, определенное этим обработчиком. Такое действие может быть простой или составной командой SQL. После успешного выполнения обработчика выполняется некоторое последействие, называемое эффектом. Ниже представлен список трех возможных эффектов обработчика.
Эффект 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.