
- •Введение
- •Лабораторная работа № 1. Работа с базами данных и таблицами ms sql server
- •1. Цель работы
- •2. Теоретическая часть
- •2.1. Работа с базой данных
- •2.2. Создание баз данных
- •2.3. Удаление баз данных
- •2.4. Работа с таблицами
- •2.5. Типы данных
- •2.6. Создание таблиц
- •2.7. Изменение структуры таблицы
- •2.8. Удаление таблиц
- •3. Задание на лабораторную работу
- •Контрольные вопросы
- •Лабораторная работа № 2. Выборка данных
- •1. Цель работы
- •2. Теоретическая часть
- •3. Задание на лабораторную работу
- •Лабораторная работа № 3. Вставка, изменение и удаление данных
- •2.2. Изменение данных
- •2.3. Удаление данных
- •Лабораторная работа № 4. Типы функций и хранимые процедуры
- •2.2. Создание функций пользователя
- •2.3. Удаление функций пользователя
- •2.4. Разработка хранимых процедур
- •2.5. Создание хранимой процедуры
- •2.6. Вызов хранимой процедуры
- •2.7. Возвращение данных из хранимой процедуры
- •2.8. Удаление хранимой процедуры
- •3. Задание на лабораторную работу
- •Контрольные вопросы
- •Лабораторная работа № 5. Метаданные
- •1. Цель работы
- •2. Теоретическая часть
- •2.1. Общие сведения
- •3. Задание на лабораторную работу
- •Контрольные вопросы
- •Список рекомендуемой литературы
- •Приложение Предметная область для разработки базы данных по вариантам
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, значит команда выполнена успешно.