Обработка событий операторами TRY и CATCH
Версии SQL Server, предшествующие SQL Server 2005, требовали написание кода обработки ошибок после каждого оператора Transact-SQL, который может вызывать ошибки. (Можно обрабатывать ошибки, используя глобальную переменную @@error). Начиная с SQL Server 2005, можно перехватить и обработать исключения, используя два оператора - try и catch. Исключение - это проблема (обычно ошибка), которая препятствует продолжению выполнения программы. При наличии такой проблемы продолжать обработку нельзя, т.к. нет достаточной информации, необходимой для решения проблемы. По этой причине существующая проблема будет направлена другой части программы, которая обработает это исключение. Роль оператора try заключается в перехватывании исключения. (Поскольку этот процесс, как правило, заключает в себе несколько операторов, то обычноиспользуется термин "блок try" вместо термина "оператор try "). Если исключение появляется внутри блока try, тo часть системы, называемая обработчиком исключений, направляет это исключение другой части программы, которая обработает исключение. Эта часть программы объявляется ключевым словом catch и поэтому называется блоком сатсн. Замечание: Обработка исключений с использованием операторов try и catch является общим методом, который используют современные языки программирования типа С# и Java для обработки ошибок. Обработка исключений с использованием блоков try и catch дает программисту множество преимуществ: · исключения предоставляют ясный способ обнаружения ошибок; · исключения предоставляют механизм прямой сигнализации об ошибке, а не при помощи каких-то посторонних эффектов; · исключения могут быть обнаружены программистом и проверены в процессе компиляции программного кода.
Пример: можно использовать обработку ошибок при помещении всех операторов в пакет и выполнить отмену действия всех операторов в группе при появлении ошибок. Пример основан на ссылочной целостности данных между таблицами depar и employee. USE sample; BEGIN TRY BEGIN TRANSACTION insert into employee values(11111, 'Ann', 'Smith', 'd2'); insert into employee values(22222, 'Matthew', 'Jones', 'd4'); -- нарушение ссылочной целостности при вставке insert into employee values(33333, 'John', 'Barrimore', ' d2'); COMMIT TRANSACTION PRINT 'Transaction committed' END TRY
BEGIN CATCH ROLLBACK PRINT 'Transaction rolled back' END CATCH; Работа примера выполняется следующим образом. Первый оператор insert выполняется успешно. После этого выполнение второго оператора приводит к нарушению ссылочной целостности данных (d4 – нет такого департамента). Поскольку все три оператора записаны внутри блока try, выдается исключение, и обработчик исключений запускает блок catch. catch выполняет отмену всех операторов и выводит соответствующее сообщение. По этой причине содержимое таблицы employee не меняется. После выполнения пакета в примере все три оператора в пакете не будут выполнены, а выводом этого примера будет: ‘Тransaction rolled back' (Выполнен откат транзакции)
Курсоры Стандартный оператор SELECT возвращает набор данных, релевантный сформированным условиям запроса. В интерактивном SQL этот полученный набор данных просто выводится на консоль пользователя и он может просмотреть полученные результаты. Встроенный оператор SELECT должен создавать структуры данных, которые согласуются с базовыми языками программирования. Операции в реляционной базе данных выполняются над множеством строк. Набор строк, возвращаемый инструкцией SELECT, содержит все строки, которые удовлетворяют условиям, указанным в предложении WHERE инструкции. Такой полный набор строк, возвращаемых инструкцией, называется результирующим набором.
Напоминание: В SQL могут быть однострочные запросы (ожидаемые результаты соответствуют одной строке данных) или многострочные запросы (результатом которых является получение целого набора строк).
Читайте также: II. Проведение эксперимента и обработка результатов Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|