Объявление обработчиков состояний — КиберПедия 

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Объявление обработчиков состояний

2020-06-02 120
Объявление обработчиков состояний 0.00 из 5.00 0 оценок
Заказать работу

Обработчик состояния можно поместить в составную команду. При создании обработчика вначале следует объявить состояние, которое обработчик должен обрабатывать. Объявленное состояние может быть исключением или же некоторым другим состоянием. В табл. 19.2 представлены возможные состояния, а также кратко описаны причины возникновения состояния каждого вида.

Таблица 19.2. Состояния, которые можно определить в обработчике.

Состояние Описание
SQLSTATE VALUE ' xxyyy ' Соответствующее значение sqlstate
SQLEXCEPTION Класс sqlstate, отличный от '00', ' 01' или '02'
SQLWARNING Класс ' 01'
NOT FOUND Класс ' 02'

Ниже приведен пример объявления состояния.

BEGINDECLARE constraint_violation CONDITIONFOR SQLSTATE VALUE '23 000';END;

Приведенный пример не является взятым из жизни, поскольку внутри структуры BEGIN…END должны располагаться и команда SQL, ответственная за возникновение особого состояния, и его обработчик.

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

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

· CONTINUE. Выполнение команды, следующей после команды, инициировавшей действие обработчика.

· EXIT. Выход из составной команды, содержащей обработчик, и выполнение следующей команды.

· UNDO. Отмена всех предыдущих команд составной и выполнение следующей команды.

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

BEGIN ATOMICDECLARE constraint_violation CONDITIONFOR SQLSTATE VALUE '23000';DECLARE UNDO HANDLERFOR constraint_violationRESIGNAL;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
.

Необрабатываемые состояния

Предположим, в предыдущем примере возникнет состояние, при котором значение SQLSTATE будет отличным от '23000'. Ваш обработчик не может обработать подобное состояние. Так как в текущей процедуре такое состояние не предусмотрено, выполняется команда RESIGNAL. После этого состояние может быть обработано на более высоком уровне. Если же и на этом уровне состояние нельзя обработать, она передается на еще более высокий уровень и т.д., пока состояние не будет обработано или пока не будет сгенерирована ошибка в основном приложении. Основная идея вышесказанного заключается в следующем: если во время выполнения команды SQL возможно появление исключений, необходимо написать обработчики всех возможных исключений. Это позволит намного упростить отладку.

Присваивание

С появлением SQL/PSM SQL наконец-то получил возможность, которую всегда имели даже самые примитивные процедурные языки, – возможность присваивания значения переменной. Присваивание выглядит так:

SET переменная = значение;

Где переменная – имя переменной, а значение – выражение. Ниже приведено несколько примеров присваивания.

SET vfname = 'Brandon';SET varea = 3.1416 *:radius *:radius;SET vhiggsmass = NULL;

Поделиться с друзьями:

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.008 с.