|
Программирование >> Программирование баз данных
Функция Возвращаемое значение error severity О error state О Возвращаемое значение показывает степень серьезности ошибки (error severity). В документации Books Online иногда вместо термина error severity применяется устаревший термин error level . Это связано с тем, что специалисты корпорации Microsoft еще не успели его заменить повсеместно в приведенном выше примере возвращаемое значение этой функции присваивается переменной (в расчете на то, что когда-либо оно потребуется в других программах), но пока не используется. При возникновении системных ошибок функция error state () всегда возвращает значение 1. В дальнейшем, после перехода к более подробному описанию средств обработки ошибок в следующей главе, будет показано, как активизировать ошибки, определяемые пользователем. До ознакомления с этим описанием читатель может использовать возвращаемую информацию о состоянии для определения того, в каком именно месте кода хранимой процедуры, функции или триггера возникла ошибка (в том случае, если одна и та же ошибка может обнаружиться в разных местах кода) error procedure () Возвращаемое значение функции error procedure () относится только к хранимым процедурам, функциям и триггерам, поэтому в предыдущем примере она не использовалась. Функция возвращает имя процедуры, при выполнении которой возникла ошибка; это очень удобно, если применяются ваши вложенные процедуры, поскольку возможно, что обработка ошибки должна фактически осуществляться в процедуре, отличной от той, в которой возникла ошибка error LiNE () Возвращаемоо значение полностью соответствует имени этой функции - оно показывает номер строки, в которой возникла ошибка error message () Текст сообщения об ошибке, соответствующий указанному номеру ошибки. Если номер ошибки обозначает системную ошибку, то возвращаемое значение error message () совпадает с тем результатом, который может быть получен путем выборки из таблицы sys .messages. Если же номер ошибки обозначает ошибку, определяемую пользователем, то функция error message () возвращэет текст, заданный при вызове функции raiserror В рассматриваемом примере используется известный номер ошибки, который соответствует ошибке, активизируемой в СУБД SQL Server при осуществлении попытки создать объект, который уже существует. Со всеми системными сообщениями об ошибках можно ознакомиться, выполнив их выборку из таблицы sys . messages. С выходом каждой версии объем выходных данных, полученных в результате выборки из таблицы sys. messages, становится все больиле (это особенно заметно в версии SQL Server 2003), поэтому нелегко найти искомую информацию путем просмотра. Автор предлагает, возможно, не такое уж изящное, но довольно эффективное решение - искусственно активизировать искомую ошибку и определять, какой номер ошибки ей соответствует. Достаточно просто предусмотреть вызов на выполнение интересующего вас кода (в данном случае оператора CREATE) и обработку ошибки, если она действительно может возникнуть. Более подробные сведения об обработке ошибок приведены в главе 11. Вместе с тем информации об использовании блоков TRY/CATCH, которую можно найти в настоящей главе, вполне достаточно для включения основных средств обработки ошибок в прикладные сценарии. Резюме Для успешного освоения всей тематики программирования приложений для СУБД SQL Server очень важно достичь полного понимания того, в чем состоит назначение сценариев и пакетов. Дело в том, что сценарии и пакеты широко применяются для осуществления чрезвычайно широкого спектра функций, начиная с создания полноценной базы данных и заканчивая программированием хранимых процедур и триггеров. Область определения локальных переменных ограничивается только одним пакетом. Предположим, что некоторая переменная уже объявлена в каком-то пакете, который относится к общему сценарию, состоящему из нескольких пакетов. Прежде чем сослаться на переменную с тем же именем в новом пакете, необходимо еще раз объявить эту переменную (и присвоить ей значение), так как в противном случае будет сформировано сообщение об ошибке. В программном обеспечении SQL Server предусмотрено больше тридцати системных переменных. В настоящей главе описаны наиболее широко используемые системные переменные, но на этом информация по указанной теме далеко не исчерпывается. Чтобы больше узнать об этих и других системных переменных, ознакомьтесь с документацией ВооЬ Online или прочитайте приложение А к настоящей книге. Системные переменные не требуют объявления и всегда являются доступными. Область действия некоторых системных переменных распространяется на весь сервер, тогда как значения других системных переменных относятся только к текущему соединению. Пакеты позволяют регламентировать порядок вьшолнения различных частей сценария. Вьшолнение первого пакета начинается с началом сценария и заканчивается после обнаружения конца сценария или первого оператора GO (в зависимости от того, какое из этих событий возникнет раньше). Запуск следующего пакета (если таковой имеется) происходит с той строки, которая следует за концом первого пакета (после оператора GO), а его вьшолнение продолжается до обнаружения конца сценария или следующего оператора GO (опять-таки в зависимости от того, что будет обнаружено раньше). Такой процесс запуска пакетов продолжается до конца сценария. Прежде всего выполняется первый пакет, отсчитываемый от начала сценария, затем выполняется второй пакет и т.д. Все операторы каждого пакета должны успешно пройти проверку в синтаксическом анализаторе запросов, так как в противном случае пакет не будет передан на вьшолнение; однако синтаксический анализ всех прочих пакетов осуществляется отдельно, после чего происходит их запуск (если они успешно проходят этап синтаксического анализа). Кроме того, в этой главе показаны конструкции, с помощью которых осуществляется управление ходом вьшолнения и анализ условий обработки ошибок. Эти конструкции позволяют создавать сложные сценарии, способные адаптироваться к различным условиям вьшолнения (в частности, определять, что требуется не инсталляция базы данных, а обновление, или выяснять версию схемы, применительно к которой должно быть проведено обновление). Наконец, в этой главе описано, как можно создавать код SQL и вызывать его на выполнение динамически. Благодаря этому появляется возможность находить способы решения задач, в которых невозможно с полной достоверностью определить заранее состав используемого сценария, или таких задач, в которых структура применяемых операторов должна фактически зависеть от содержания отдельньгх фрагментов данных. В следующих нескольких главах показано, как применяются принципы формирования сценариев и пакетов для создания хранимых процедур и триггеров - объектов СУБД SQL Server, которые в наибольшей степени напоминают настоящие программы. Кроме того, будет показано, как использовать любой язык .NET для расширения функциональных возможностей хранимых процедур, функций и триггеров.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |