Хранимая процедура является специальным видом пакета, написанного на Transact-SQL с использованием языка SQL и его процедурных расширений. Основным отличием между пакетом и хранимой процедурой является то, что процедура сохраняется как объект базы данных. Другими словами, хранимая процедура сохраняется на серверной стороне для улучшения производительности и согласованности повторяющихся задач.
Database Engine поддерживает хранимые процедуры и системные процедуры. Хранимые процедуры создаются тем же самым способом, что и все другие объекты базы данных, т. е. при помощи языка DDL. Системные процедуры предоставляются через Database Engine и могут быть использованы для доступа и изменения информации в системных каталогах. Этот раздел описывает хранимые процедуры (определяемые пользователем), в то время как системные процедуры рассматриваются в различных главах этой книги.
При создании хранимой процедуры можно задать (необязательный) список ее параметров. Процедура принимает соответствующие аргументы каждый раз, когда осуществляется ее вызов. Хранимые процедуры могут возвращать значение, которое отображает заданную пользователем информацию или, в случае возникновения ошибки, соответствующее сообщение об ошибке.
Перед помещением хранимой процедуры в качестве объекта в базу данных она предварительно компилируется. Эта компилированная форма сохраняется в базе данных и используется каждый раз при вызове хранимой процедуры на выполнение. Это свойство хранимых процедур предоставляет важное преимущество: повторная компиляция процедуры (почти всегда) исключается, поэтому возрастает производительность. Это же свойство хранимых процедур дает еще одно преимущество, связанное с объемом данных, которые должны быть отправлены системе базы данных и получены от этой системы. Может потребоваться менее 50 байтов для вызова хранимой процедуры, которая содержит несколько тысяч байтов операторов. Общий эффект от такой экономии, когда множество пользователей выполняют повторяющиеся задачи, может быть весьма значительным.
Хранимые процедуры также могут быть использованы в следующих целях:
♦ для управления авторизацией доступа;
♦ для создания контрольного журнала о действиях с таблицами базы данных.
Использование хранимых процедур обеспечивает управление безопасностью более высокого уровня, чем использование операторов grant и revoke, которые определяют различные привилегии доступа для пользователей. Это происходит потому, что авторизация на выполнение хранимой процедуры не зависит от авторизации на модификацию объектов, которые содержит хранимая процедура (как описано в следующем разделе).
Хранимые процедуры, которые отслеживают операции записи и/или чтения, связанные с таблицами, являются дополнительным средством обеспечения безопасности базы данных. При использовании подобных процедур администратор базы данных может отслеживать изменения, выполненные пользователями или прикладными программами.