EXEC my_proc6 9, @st OUTPUT
SELECT @st
Этот блок команд позволяет определить стоимость товаров, проданных в сентябре (входной параметр месяц указан равным 9).
Пример 7.Использование вложенных процедур.
Требуется создать процедуру для определения общего количества товаров, приобретенных фирмой, в которой работает заданный сотрудник.
Сначала разработаем процедуру для определения фирмы, где работает сотрудник.
CREATE PROC my_proc7
@n VARCHAR(50) ,
@f VARCHAR(50) OUTPUT
AS
SELECT@f = Название_фирмы
FROM Клиенты WHEREФамилия=@n
Затем создадим процедуру, подсчитывающую общее количество товара, который закуплен интересующей нас фирмой.
Пример 8.
CREATE PROC my_proc8
@fam VARCHAR(20) ,
@kol INT OUTPUT
AS
DECLARE @firm VARCHAR(20)
EXEC my_proc7 @fam, @firm OUTPUT
SELECT @kol = Sum(Продажи.Количество_ед_товара)
FROM Клиенты INNER JOINПродажи
ON Клиенты.ID_Клиента=Продажи.Клиент
GROUP BYКлиенты.Название_фирмы
HAVINGКлиенты.Название_фирмы =@firm
Вызов процедуры осуществляется с помощью команд:
DECLARE@k INT
EXEC my_proc8 'Иванов', @k OUTPUT
SELECT @k
Пример 9. Создать хранимую процедуру для вывода списка товаров, проданных заданным продавцом за текущий день и подсчета общего количества и стоимости этих товаров.
Вариант решения 1.
CREATE myproc9
@name varchar(20)
AS
SELECT Товары.Название_товара, SUM (Продажи.Кол-во_ед_товара) Количество, SUM (Стоимость_продажи) Стоимость
FROM Товары INNER JOIN Продажи
ON Товары.id-товара=Продажи .Продавец
GROUP BY Товары.Название_товара,Персонал.Фамилия,Продажи.Дата
HAVING Персонал.Фамилия=@nameand
Продажи.Дата=(SELECT CONVERT(varchar(10),GETDATE(),120))
Вариант решения 2.
CREATE myproc9
@name varchar(20)
AS
SELECT Товары.Название_товара, SUM (Продажи.Кол-во_ед_товара) Количество, SUM (Стоимость_продажи) Стоимость
FROM Товары INNER JOIN Продажи
ON Товары.id-товара=Продажи .Продавец
GROUP BY Товары.Название_товара,Персонал.Фамилия,Продажи.Дата
HAVING Персонал.Фамилия=@nameand
Продажи.Дата=(SELECT CAST(YEAR (GETDATE()) AS CHAR (4))+’-‘+CAST(MOUNTH(GETDATE()) AS CHAR(2))+’-‘+CAST(DAY(GETDATE())AS CHAR(2)))
Задания для самостоятельной работы (Лаб 2)
I) Разработайте следующие типы хранимых процедур:
1. Процедура без параметров;
2. Процедура с одним параметром;
3. Процедура с несколькими входными параметрами и значением по умолчанию
(например, с помощью хранимой процедуры для заданного поставщика
a. из таблицы Поставки требуется удалить все сведения, относящиеся к заданному периоду поставок);
b. в таблицу Телефоны_поставщиковтребуется добавить заданный номер телефона) и другие варианты процедур.
4. Процедура с входными и выходными параметрами;
5. Разработайте собственный пример использования вложенных процедур.
II) Выполните следующие тесты:
Вариант 1
1. Пусть для заданного издательства создана процедура для увеличения цены книг на заданный %:
CREATE PROCmy_procl
@рFLOAT,
@izVARCHAR(20)
AS
UPDATE Книга SET Цена=Цена*(l+@p)
WHERE Издательство=@iz
Определите правильную команду для выполнения процедуры.
· EXEC my_procl 0.2, 'ACT’
· EXECmy_procl @p=0.2, 'ACT'
· EXEC my_procl @издат='АСТ', 0.2
· EXEC my_procl @iz='ACT', @p=0.25
2.Пусть для определения общей стоимости книг, изданных заданным автором в заданном издательстве, разработана процедура:
CREATE PROCmy_proc2
@fVARCHAR(20),
@izVARCHAR(20),
@SFLOAT OUTPUT
AS
SELECT@s = SUM (Книга.Цена * книга.Количество)
FROMКнигаINNER JOINАвтор
ON Книга.КодАвтора=Автор.КодАвтора
GROUP BY Автор.Фамилия, Книга.Издательство
HAVING Автор.Фамилия=@f AND Книга.издатепьство=@iz
Укажите правильный вызовпроцедуры.
· DECLARE @st FLOAT
EXEC my_proc2 @iz='Мир',@s=@st, @f='ИBaHOB'
SELECT @st
· DECLARE @st FLOAT
DECLARE Of VARCHAR(20), @iz VARCHAR(20)
EXEC rny_proc2 @£='Иванов' ,@iz=’Mир' ,@s=@st OUTPUT
SELECT @st
· DECLARE @st INT
EXEC my_proc2 ('Иванов’ , 'Мир', @st OUTPUT)
SELECT @St
· DECLARE list FLOAT