Нередко хранимые процедуры используются для выполнения тех или иных модификаций данных в таблицах базы данных. Однако они также позволяют, и возвращать в вызывающую конструкцию данные, получаемые в ходе выполнения команд процедуры. Эта возможность позволяет использовать процедуры для автоматизации выполнения сложных вычислений. Пользователь подает на вход процедуры набор значений, а в ответ ему возвращается результат вычисления. Конечно, подобное поведение более характерно для функций.
В распоряжении пользователей имеются следующие варианты возвращения данных из хранимой процедуры.
- стандартный набор строк (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, значит команда выполнена успешно.