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

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

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

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

2020-06-02 118
Объявление обработчиков состояний 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;

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

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

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...



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

0.007 с.