Программирование >>  Реализация баз данных 

1 ... 78 79 80 [ 81 ] 82 83 84 ... 162


Занятие 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, если процедура таковой не является. Следующие примеры демонстрируют, как можно выяснить, что процедура - расширенная, а - нет:



1 ... 78 79 80 [ 81 ] 82 83 84 ... 162

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика