Lab8_SQL (1059135), страница 2
Текст из файла (страница 2)
USE Sales
DECLARE @answer int
EXEC dbo.Calc 1, 2, @answer OUTPUT
SELECT 'The answer is:', @answer
2. Закройте окно запроса.
Так что же все-таки произошло? Мы создали параметр @ret для возвращения значения программе, вызвавшей процедуру. Затем перед выполнением хранимой процедуры мы создали с помощью объявления DECLARE @answer переменную для хранения выходного параметра (ключевое слово DECLARE используется для создания временных переменных). После создания переменной мы выполнили хранимую процедуру и указали ей поместить значение @ret во временную переменную @answer, отображаемую впоследствии на экране с помощью инструкции SELECT.
Рис.5. Мы получили результат сложения
В заключение работы самостоятельно создайте хранимую процедуру для БД Sales с параметрами, подсчитывающую количество товаров во всех заказах, сделанных таким-то покупателем за такой-то период. Предварительно добавьте (если нужно) в БД три записи, две из которых относятся к заказам, сделанным указанным во входном параметре покупателем в указанный период времени. Протестируйте созданную процедуру.
Выводы
Хранимая процедура представляет собой набор инструкций Transact-SQL (обычно запросов), хранящийся на сервере в ожидании запуска пользователями. Основное достоинство централизованного хранения заключается в том, что при выполнении пользователям не нужно пересылать по сети сотни строк кода, а всего лишь одну строку EXEC xpaнимая_процедура. Этими хранимыми процедурами легче управлять, чем распределенным кодом, поскольку, если вам потребуется изменить код процедуры, то сделать это нужно только на сервере, а не на всех машинах клиентов.
Хранимые процедуры используются для извлечения и изменения данных в любое время.
В отличие от триггеров, хранимая процедура явно вызывается приложением. Системные хранимые процедуры очень полезны для администрирования и поддержки базы данных.
Пользовательские хранимые процедуры применяются практически в любых задачах. Их преимущества, по сравнению с обычными представлениями и запросами, более чем очевидны: после первого выполнения компилированный план процедуры хранится в быстродействующем кэше в оперативной памяти, что существенно повышает скорость выполнения запросов. Другое их преимущество состоит в том, что пользователь может получить право выполнения хранимой процедуры, даже если он не имеет права доступа к тем объектам, к которым обращается процедура.