Обработка событий операторами TRYvi CATCH

Оценить
(0 голоса)

Версии SQL Server, предшествующие SQL Server 2005, требовали написание кода обработки ошибок после каждого оператора Transact-SQL, который может вызывать ошибки. (Вы можете обрабатывать ошибки, используя глобальную переменную @@error. В примере 13.1 показано использование этой переменной.) Начиная с SQL Server 2005, вы можете перехватить и обработать исключения, используя два оператора- try и catch. В этом разделе вначале объясняется, что означает «исключение», затем обсуждается работа этих двух операторов.

Исключение- это проблема (обычно ошибка), которая препятствует продолжению выполнения программы. При наличии такой проблемы вы не можете продолжать обработку, потому что у вас нет достаточной информации, необходимой для решения проблемы. По этой причине существующая проблема будет направлена другой части программы, которая обработает это исключение.

Роль оператора try заключается в перехватывании исключения. (Поскольку этот процесс, как правило, заключает в себе несколько операторов, то обычно используется термин «блок try» вместо термина «оператор try»). Если исключение появляется внутри блока try, то часть системы, называемая обработчиком исключений, направляет это исключение другой части программы, которая обработает исключение. Эта часть программы объявляется ключевым словом catch и поэтому называется блоком catch.

Обработка исключений с использованием блоков try и catch дает программисту множество преимуществ, например, таких:

♦ исключения предоставляют ясный способ обнаружения ошибок без использования хаотичного кода;

♦ исключения предоставляют механизм прямой сигнализации об ошибке, а не при помощи каких-то посторонних эффектов;

♦ исключения могут быть обнаружены программистом и проверены в процессе компиляции программного кода.

В примере 8.4 демонстрируется, как работает обработка ошибок при использовании конструкции try/catch. В нем показано, как вы можете использовать обработку ошибок при помещении всех операторов в пакет и как выполнить отмену действия всех операторов в группе при появлении ошибок. Этот пример основан на ссылочной целостности данных между таблицами department и employee. Поэтому вы должны создать обе таблицы, используя ограничения primary key и foreign key, как это было сделано в примере 5.11.

Обработка событий операторами TRYvi CATCH

Обработка событий операторами TRYvi CATCH

 

После выполнения пакета в примере 8.4 все три оператора в пакете не будут выполнены, а выводом этого примера будет:

'Transaction rolled back' (Выполнен откат транзакции.)

Работа примера 8.4 выполняется следующим образом. Первый оператор insert выполняется успешно. После этого выполнение второго оператора приводит к нарушению ссылочной целостности данных. Поскольку все три оператора записаны внутри блока try, выдается исключение, и обработчик исключений запускает блок catch, catch выполняет отмену всех операторов и выводит соответствующее сообщение. По этой причине содержимое таблицы employee не меняется.


Хранимые процедуры
Создание выполняемых хранимых процедур
Изменение структуры хранимых процедур
Хранимые процедуры и CLR
Создание и выполнение функций, созданных пользователем

Добавить комментарий


Защитный код
Обновить

© 2018 www.serversql.ru. Все права защищены.