Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodichka_SQL.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
432.13 Кб
Скачать

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

После того как процедура была создана, ее можно запускать.

В SQL Server в распоряжении пользователя имеются два способа выполнения хранимой процедуры:

  • указание только имени процедуры;

  • использование команды EXECUTE.

Первый вариант используется, когда вызов хранимой процедуры является единственной командой передаваемого на исполнение пакета. Однако когда вызов хранимой процедуры не является единственной командой в пакете, то требуется обязательное указание команды EXECUTE. Более того, указание этой команды требуется и при вызове процедуры из тела другой процедуры.

Упрощенный синтак­сис команды EXECUTE следующий:

EXEC procedure_name

[ [ @parameter = ] { value | @variable [ OUTPUT ] | [ DEFAULT ] ] [ ,...n ].

Указывая ключевое слово OUTPUT, вы тем самым предписываете присвоить соответствующей локальной переменной (внешней по отношению к процедуре) при завершении хранимой процедуры значение соответствующего параметра. Отметим, что значения параметров могут свободно изменяться в ходе работы процедуры. Использование слова OUTPUT при вызове процедуры разрешается только для параметров, которые были объявлены при создании процедуры с ключевым словом OUTPUT.

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

Рассмотрим примеры:

Пример 9.

Для выполнения процедуры из первого примера:

EXECUTE SimpleMine1

Точно также и в примере 5, процедура SimpleMine2.

Пример 10.

Чтобы выполнить процедуру SimpleMine3 введите:

EXECUTE SimpleMine3 ‘Вася’

Пример 11.

DECLARE @myOutput char(6)

EXECUTE SimpleMine4 @myOutput OUTPUT

SELECT @myOutput.

2.7. Возвращение данных из хранимой процедуры

Нередко хранимые процедуры используются для выполнения тех или иных модификаций данных в таблицах базы данных. Однако они также позволяют, и возвращать в вызывающую конструкцию данные, получаемые в ходе выполнения команд процедуры. Эта возможность позволяет использовать процедуры для автоматизации выполнения сложных вычислений. Пользователь подает на вход процедуры набор значений, а в ответ ему возвращается результат вычисления. Конечно, подобное поведение более характерно для функций.

В распоряжении пользователей имеются следующие варианты возвращения данных из хранимой процедуры.

  • стандартный набор строк (recordset). Этот вариант подразумевает выполнение в теле хранимой процедуры команды SELECT, которая подготовит набор данных и вернет его непосредственно в соединение. Отметим, каждая процедура может формировать множество наборов строк, которые могут иметь разную структуру. Напомним, что функции пользователя также могут возвращать стандартный набор строк, однако в отличие от процедур они возвращают всего один набор строк.

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

  • использование кода завершения. После завершения работы процедуры сервер присваивает ей код завершения. По умолчанию этот код равен 0. Однако можно вернуть любой другой код завершения, который будет свидетельствовать о тех или иных ситуациях, обнаруженных в ходе выполнения процедуры. Например, если пользователь вызывает процедуру для выполнения вставки строки, то процедура предварительно может выполнить некоторые проверки на корректность вводимых данных и в случае обнаружения каких-либо несоответствий вернуть тот или иной код завершения. Анализируя полученный код завершения, можно понять причину отмены операции вставки. Для установки кода завершения используется команда RETURN n. Когда в теле процедуры встречается команда RETURN, сервер завершает выполнение процедуры и устанавливает код завершения, указанный с помощью параметра п.

  • использование определяемых пользователем ошибок. В SQL Server имеется механизм, позволяющий пользователям создавать свои собственные сообщения об ошибках. С помощью команды RAISEROOR можно заставить сервер передать в текущее соединение сообщение о любой ошибке, в том числе и об определяемой пользователем. Для обнаружения ошибки применяют специ­альные средства. Практически все технологии доступа к данным (ADBC, ADO, OLE-DB, DB-Library и т.д.) имеют средства обнаружения ошибок.

Пример 12.

Для выполнения процедуры, созданной в примере 9 наберите:

DECLARE @theError int

EXECUTE @theError=ErrorSP

SELECT @theError AS 'Return Value'

Если во второй панели сетки отображается 0, значит команда выполнена успешно.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]