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

Наши рекомендации