|
Программирование >> Реализация баз данных
Занятие 1 Основные сведения о хранимых процедурах 235 Перед созданием хранимой ее команды проходят синтаксическую проверку. Если при этом не обнаружено ни одной ошибки, имя процедуры сохраняется таблице а ее текст - в таблице При первом запуске хранимой процедуры создается план исполнения и хранимая процедура компилируется. В дальнейшем ее обработка поскольку SQL Server не приходится проверять синтаксис создавать план исполнения и компилировать текст процедуры. До создания нового плана в кэше проверяется наличие существующего плана исполнения. Относительный прирост производительности, вызываемый размещением планов исполнения хранимых процедур в кэше процедур, уменьшается, поскольку планы исполнения всех операторов SQL теперь хранятся в кэше процедур. При исполнении оператора по возможности предпринимается попытка использования существующего плана исполнения. Возможности программирования Созданную хранимую процедуру можно вызвать в любой момент, при возникновении малейшей необходимости. Это обеспечивает модульность и стимулирует повторное использование кода. Последнее облегчает сопровождение базы данных, так как она изолирована от меняю1иихсм бизнес-правил. Модифицировать хранимую процедуру в соответствии с новыми правилами можно в любой момент. После этого все приложения, использующие ее, автоматически придут в соответствие с новыми бизнес-правилами без непосредственной модификации. Подобно программам, написанным на других языках программирования, хранимые способны принимать входные параметры, возвращать значения выходных параметров, поддерживать обратную связь с пользователем посредством вывода кодов состояния и текстовые ений, а также вызывать другие дуры. Например, i дна хранимая процедура может другой код состояния, в зависимости от которого последняя выполняет те или иные действия. Если разработчикам удобно писать сложные программы на таких языках, как C++, то затем эти программы можно вызывать из SQL Server средствами хранимых осо- бого типа, которые называются расширенными хранимыми процедурами. Хранимую процедуру пишут для решения какой-либо одной задачи - в результате ее можно использовать в нескольких базах данных. Например, хранимая процедура sprename предназначена для изменения имен созданных пользователем объектов (например, таблицы, поля или i-i .вательско!. типа данных) в текущей базе данных. В одной базе данных ее используют для переименования таблицы, в другой - столбца таблицы и т. д. Безопасность Другое важное назначение хранимых процедур - повышение безопасности посредством изоляции и шифрования. Пользователям можно предоставить право на исполнение хранимой процедуры без непосредственного доступа к объектам базы данных, с которыми работает хранимая процедура. Кроме того, если хранимую процедуру зашифровать создании или модификации, пользователям не удастся прочитать команды Transact-SQL, составляющие процедуру. Эти функции безопасности позволяют изолировать от пользователя структуру базы данных, что обеспечивает целостность данных и надежность базы. Категории хранимых процедур Существует пять классов хранимых процедур: системные, локальные, временные, расширенные и удаленные. Есть и другие способы но этот позволяет легко описать местонахождение, назначение и возможности хранимой процедуры. Системные хранимые процедуры Системные хранимые процедуры в базе данных Master. Как правило, их имена начинаются с префикса sp . Они предназначены для поддержки функции t Server (в частности, процедур для с каталогом). К ним относится выборка данных из сис- темные лип внешними приложениями, администрирование базы данных и управление безопасностью. Например, средствами хранимой процедуры для работы с каталогом можно привилегии для таблиц. В следующем операторе системная хранимая отображает привилегии для таблицы Stores из базы данных Pubs: USE Pubs .. . GO ** - EXECUTE sp tat)le privileges Stores Очень часто администратору просмотреть сведения о пользователях и про- цессах текущей базы данных. Это ный этап предшествует закрытию базы данных. Вот каким оператором с помощью системной хранимой процедуры все про- цессы пользователя EXECUTE Gp whQ @loginame=LAB1\A.Jministrator Для большинства организаций, хранящих в базах конфиденциальные данные, весьма важна безопасность баз данных. Далее показан оператор, который с помошью системной процедуры отображает все учетные записи пользо- вателей и групп Windows NT или Windows 2000 (хотя эти записи уже не существуют, им все равно соответствуют элементы системных таблиц SQL Server): EXECUTE sp vaiioateioglnb В SQL Server включены сотн мных хранимых процедур; их полный список приведен в разделе eSystem Stored Procedures* в Books Online. В этом справочнике упоминается и несколько расширенных хранимых процедур, о которых мы поговорим в следующих разделах. Локальные хранимые процедуры Локальные хранимые процедуры обычно находятся в пользовательской базе данных. Как правило, их создают для решения определенных задач в конкретной базе данных. Локальные хранимые процедуры также настраивать системные хранимые процедуры. Чтобы создать на основе системной хранимой процедуры пользовательскую процедуру, нужно сделать копию системной хранимой процедуры, а затем сохранить ее как локальную хранимую процедуру. В упражнении 3 мы покажем, как создавать локальные хранимые процедуры в базе данных хранимые процедуры Временная хранимая процедура похожа на локальную, однако она существует лишь до соединения, в котором или до завершения работы SQL Server. В зави- симости от типа такая процедура после завершения работы сервера или разрыва Занятие i Основные сведения имых процедурах 237 соединения. Непостоянство обусловлена тем, что временные хранимые процедуры находятся в базе данных TempDB. При каждом запуске сервера эта база создается заново, поэтому после закрытия сервера все объекты этой базы данных исчезают. Временные хранимые процедуры полезны при работе с более ранними версиями SQL Server, которые не повторное использование планов исполнения, а также в тех случаях, когда нет смысла сохранять процедуру, поскольку значения ее параметров постоянно меняются. Существует три типа временных хранимых процедур: локальные (или закрытые), глобальные и создаваемые непосредственно в TempDB. Локальная процедура всегда начинается с символа а глобальная - с ##. Создание каждого типа временных хранимых процедур описано в занятии 2. При исполнении временной хранимой процедуры ее область действия ограничена соединением, в котором она создана. Однако такая процедура видима всем пользователям, установившим соединение с базой данных, в окне Object Browser в Query AnaJyzer. Ограниченность области ее действия исключает возникновение конфликтов имен с другими соединениями, г которых созданы временные хранимые процедуры. Чтобы гарантировать уникальность имени временной хранимой процедуры, SQL Server добавляет к нему набор символов подчеркивания и уникальный номер соединения. Привилегии для локальной процедуры не предоставляются другим пользователям. Временная хранимая процедура удаляется из TempDB при закрытии соединения, в котором она создана. Глобальные временные процедуры разрешается исполнять в любом соединении. Подобно временным процедурам других типов, они создаются в базе данных TempDB, поэтому у них должны быть уникальные имена. Право на исполнение глобальной временной автоматически предоставляется роли и не может быть изменено. Глобальные временные процедуры так же непостоянны, как и локальные. Они удаляются после закрытия соединения, в котором созданы. Временные хранимые которые создаются непосредственно в TempDB. от- личаются от локальных и глобальных процедур следующим: для них разрешается настроить права доступа; они сохраняются даже после завершения соединения, в котором созданы; они не удаляются до завершения работы SQL Server. Поскольку процедуры этого типа создаются непосредственно в TempDB, важно полностью определять имя объекта базы данных в коде TransHct-SOl- Например, на таблицу Authors из базы данных Pubs, dbo, следует ссылаться по имени authors. Расширенные хранимые процедуры Расширенные хранимые процедур аются к внешним программам, скомпилированным в виде 32-разрядных DLL. Некоторые системные хранимые процедуры также рассматриваются как расширенные. Например, хранимая процедура которая посылает заданному адресу почтовое сообщение с вложенным результирующим набором, является системной и расширенной одновременно. Соглашение об именовании предполагает использование в именах расширенных хранимых процедур префикса хр . Однако имена некоторых расширенных процедур начинаются с префикса а в именах некоторых других, не расширенных процедур используется префикс хр . Поэтому нельзя различить системные и расширенные хранимые процедуры, полагаясь лишь на отличия в именах. Определить, является ли хранимая процедура расширенной, позволяет функция ОВ-JECTPROPERTY. Она возвращает для свойства IsExtendedProc значение если процедура является расширенной, или 0, если процедура таковой не является. Следующие примеры демонстрируют, как можно выяснить, что процедура - расширенная, а - нет:
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |