Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по БД.doc
Скачиваний:
94
Добавлен:
21.09.2019
Размер:
944.13 Кб
Скачать

2.4. Хранимые процедуры

До сих пор мы рассматривали пакеты операторов Transact SQL, хранимые в текстовом файле. SQL Server позволяет создавать хранимые процедуры, представляемые также пакеты операторов Transact SQL, хранимые на сервере.

Хранимые процедуры обладают рядом преимуществ:

  • хранимые процедуры являются объектами базы данных; они размещаются в файле базы данных и перемещаются вместе с файлом в случае отключения или репликации базы данных;

  • хранимые процедуры позволяют передавать данные процедуре для их обработки и принимать обратно от процедуры как данные, так и сформированный процедурой итоговый код;

  • хранимые процедуры представляются в оптимизированной форме, что дает возможность ускорить их выполнение.

SQL-сценарии, с которыми мы работали, выполнялись независимо - у нас не было никакой возможности передать им какую-либо информацию, а единственная информация, которую они возвращали, отображалась в панелях сетки Grid или в панели сообщений Message Pane окна Query (Запрос). Хранимые процедуры предоставляют два метода взаимодействия с вне­шними процессами: через параметры и через возвращаемые значения.

Параметры представляют собой специальный тип локальных перемен­ных, объявляемых как часть хранимой процедуры. Вы можете использо­вать параметры для передачи информации хранимым процедурам (вход­ные параметры) или получения данных обратно из хранимой процедуры (выходные параметры).

Возвра­щаемые значения всегда являются целыми числами. Теоретически они могут быть использованы для возврата любого результата, но в соответ­ствии с соглашением они применяются для возврата статуса выполнения хранимой процедуры.

Например, хранимая процедура может возвращать 0, если все идет нормально, или -1, если возникла ошибка. Более сложные хранимые процедуры могут возвращать различные значения для указа­ния типа ошибки.

Важно не путать параметры и возвращаемые коды с какими-либо резуль­тирующими множествами, которые может возвращать хранимая проце­дура. Хранимая процедура может содержать любое количество операто­ров SELECT, которые будут возвращать результирующие множества. Для их получения вам не нужно использовать параметр; они будут возвраще­ны в программу приложения независимо.

Хранимые процедуры делятся на две группы: системные процедуры, со­здаваемые SQL Server, и пользовательские процедуры, которые вы со­здаете самостоятельно. Системные хранимые процедуры хранятся в глав­ной базе данных. Все они начинаются с символов sp_.

В главной базе данных около сотни системных процедур. Многие из них предоставляют средства для программного выполнения задач админист­рирования.

Использование и создание хранимых процедур

Как и для всех других объектов базы данных, сначала нужно создать пользовательскую хранимую процедуру, затем её можно использовать.

Для вызова пользовательских и системных хранимых процедур используется оператор EXECUTE:

EXECUTE имя_процедуры параметр [, параметр]

Использование Object Browser для работы с хранимыми процедурами

Панель Object Browser содержит папку Stored Procedures для каждой базы данных, включая главную. Каждая хранимая процедура, содержащаяся в списке, имеет папку Parameters. В этой папке в определенном порядке размещаются параметры хранимой процедуры, поэтому вы можете воспользоваться ею для проверки имен параметров и их позиций.

Создание хранимой процедуры

CREATE PROCEDURE имя_процедуры

[список параметров]

AS

операторы_процедуры

Имя_процедуры должно отвечать правилам, принятым для идентификаторов.

Вы можете создать временную локальную или глобальную хранимую процедуру, указав перед именем процедуры # или ## соответственно.

Операторы_процедуры, следующие после ключевого слова AS в операторе CREATE, определяют действия, которые будут выполняться при вызове хранимой процедуры. Хранимые процедуры могут вызвать другие хранимые процедуры, т. е. реализовывать вложенность. Фактическая глубина вложенности хранимых процедур составляет 32.

Имена_параметров должны начинаться с символа @, подобно локальным переменным.

@имя_параметра тип_данных [= значение_по_умолчанию] [OUTPUT]

Параметры являются локальными переменными; они видимы только в пределах хранимой процедуры.

Значение_по_умолчанию представляет собой значение, которое будет использоваться хранимой процедурой в случае, если пользователь не укажет значение для входного параметра в вызове хранимой процедуры. Ключевое слово OUTPUT, которое также не является обязательным, определяет параметры, которые будут возвращены в вызвавший процедуру сценарий.

Использование аргументов

Хранимые процедуры не были бы так полезны, если бы они не могли принимать аргументы. В этом хранимые процедуры подобны функциям: они принимают один или более аргументов и возвращают вызывающему коду одно или более значений. Кроме того, хранимые процедуры могут возвращать один или более курсоров. Кур­сор — это эквивалент объекта ADO Recordset (но не совсем то же самое, что объект DataSet из ADO .NET). Данные курсора выводятся на панели Results в окне Query Analyzer, когда вы выполняете инструкцию SELECT.

Аргументы, передаваемые в хранимую процедуру и из нее, объявляются после имени процедуры в инструкции CREATE PROCEDURE. Список разделенных запятыми аргументов следует после имени процедуры, перед ключевым словом AS:

CREATE PROCEDURE procedure_name

@argument1 type1, @argument2 type2, …

AS

Возврат значений из хранимой процедуры

Возврат значений реализуется с помощью оператора RETURN, который имеет следующую форму: RETURN (int)

В операторе RETURN int - это целочисленное значение. Возврат значений чаще всего используется для определения статуса выполнения хранимой процедуры. Ошибки могут быть проанализированы с помощью глобальной переменной @@ERROR, которая возвращает статус выполнения последней команды Transact-SQL: 0 указывает на успешное выполнение, а ненулевое значение указывает, что имела место ошибка.