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 Персонал.Фамилия=@name and
Продажи.Дата=(SELECT CONVERT (varchar(10), GETDATE (),120))
Вариант решения 2.
CREATE myproc9
@name varchar(20)
AS
SELECT Товары.Название_товара, SUM (Продажи.Кол-во_ед_товара) Количество, SUM (Стоимость_продажи) Стоимость
FROM Товары INNER JOIN Продажи
ON Товары.id-товара=Продажи.Продавец
GROUP BY Товары.Название_товара,Персонал.Фамилия,Продажи.Дата
HAVING Персонал.Фамилия=@name and
Продажи.Дата=(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 PROC my_procl
@р FLOAT,
@iz VARCHAR (20)
AS
UPDATE Книга SET Цена=Цена*(l+@p)
WHERE Издательство=@iz
Определите правильную команду для выполнения процедуры.
· EXEC my_procl 0.2, 'ACT’
· EXEC my_procl @p=0.2, 'ACT'
· EXEC my_procl @издат='АСТ', 0.2
· EXEC my_procl @iz='ACT', @p=0.25
2. Пусть для определения общей стоимости книг, изданных заданным автором в заданном издательстве, разработана процедура:
CREATE PROC my_proc2
@f VARCHAR (20),
@iz VARCHAR (20),
@S FLOAT 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