Выполнение хранимой процедуры

Для выполнения хранимой процедуры используется команда:

[ EXEC [UTE]] имя_процедуры [ ; номер]

[[@имя_параметра=] { значение | @имя_переменной }

[OUTPUT] | [default ] [,...n]

Если вызов хранимой процедуры не является единственной командой в пакете, то присутствие команды EXECUTE обязательно.

Более того, эта коман­да требуется для вызова процедуры из тела другой процедуры или триггера.

Использование ключевого слова OUTPUT при вызове процедуры раз­решается только для тех параметров, которые были объявлены со словом OUTPUT при создании процедуры.

Когда же при вызове процедуры для параметра указывается ключевое слово DEFAULT, то будет использовано значение по умолчанию.

Естест­венно, указанное слово DEFAULTразрешается только для тех параметров, для которых определено значение по умолчанию.

Из синтаксиса команды EXECUTEвидно, что при вызове процедуры имена параметров могут быть опущены. Однако в этом случае пользователь должен указывать значения для параметров в том же порядке, в каком они перечислялись при создании процедуры.

Присвоить параметру значение по умолчанию, просто пропустив его при перечислении нельзя. Если требуется опустить параметры, для которых определено значение по умолчанию, достаточно при вызове хранимой процедуры явно указать имена этих параметров.

Отметим, что при вызове процедуры указываются либо имена всех пара­метров со значениями, либо только значения без имени параметра. Их комбинирование не допускается.

Пример 1.Процедура без параметров.

Требуется разработать процедуру для получения названий и стоимости товаров, приобретенных Ивановым.

CREATE PROC my_procl

AS

SELECT Товар.Название,

Товар.Цена_ед_товара*Продажи.Количество

AS Стоимость, Клиенты.Фамилия

FROM Клиенты INNER JOIN (Товар INNER JOIN Продажи

ON Товар.КодТовара=Сделка.КодТовара)

ON Клиент.КодКлиента=Сделка.КодКлиента

WHERE Клиент.Фамилия = ‘Иванов’;

Для обращения к процедуре можно использовать команды:

EXECmy_proclили просто my_procl

Процедура возвращает набор данных.

Пример 2.Процедура без параметров.

Требуется создать процедуру для уменьшения цены товаров, относящихся к категории «хлебобулочных», на 10%.

CREATE PROC my_proc2

AS

UPDATE Товар

SET Цена_ед_товара = Цена_ед_товара*0.9

WHERE Категория =’Хлебобулочные’

Эта процедура не возвращает никаких данных.

Пример 3.Процедура с одним входным параметром.

Требуется создать процедуру для получения названий и стоимости товаров, которые приобрел задан­ный клиент.

CREATE PROC my_proc3

@k VARCHAR(50) /* параметр

AS

SELECT Товар.Название,

Товар.Цена_ед_товара*Продажи.Количество_ед_товара AS Стоимость, Клиент.Фамилия

FROM Клиенты INNER JOIN (Товары INNER JOIN Продажи

ON Товар.ID_Товара = Продажи.Товар)

ON Клиенты.ID_Клиента=Продажи.Клиента

WHERE Клиенты.Фамилия=@k

Для обращения к процедуре можно использовать команды:

EXEC my_proc3 'Иванов' или

mу_ргосЗ @k= 'Иванов’

Пример 4.Процедура с несколькими входными параметрами.

Требуется создать процедуру для уменьшения цены заданного товара в соответствии с заданным %.

CREATE PROCmy_proc4

@t VARCHAR(20), @p FLOAT

AS

UPDATE Товар

SET Цена_ед_товара = Цена_ед_товара * (1-@р)

WHERE Товар = @t

Для обращения к процедуре можно использовать команды:

· EXEC my_proc4 'Вафли', 0.05

или

· EXEC my_proc4 @t='Вафли', @p=0.05

Пример 5.Процедура с входными параметрами и значениями по умолчанию.

Создать процедуру для уменьшения цены товара заданноо в соответствии с указанным %. При этом обоим параметрам задаем значение по умолчанию.

CREATE PROC my_proc5

@t VARCHAR(20) = 'Конфеты',

@p FLOAT = 0.1

AS

UPDATE Товар SET Цена_ед_товара = Цена_ед_товара * ( l - @p )

WHERE Товар = @t

Для обращения к процедуре можно использовать следующие команды:

· EXECmy_proc5 'Вафли', 0.05

или

· EXEC my_proc5 @t=’Вафли’, @р=0.05

или

· EXECmy_proc5 @p= 0.05

В этом случае будет уменьшена цена конфет (т.к. значение товара не указано при вызове процедуры и берется по умолчанию).

EXEC my_proc5

В последнем случае оба параметра (и тип, и проценты) не указаны при вызове процедуры, их значения берутся по умолчанию.

Пример 6.Процедура с входными и выходными параметрами.

Создать процедуру для определения общей стоимости товаров, продан­ных за заданный месяц.

CREATE PROC my_proc6

@m INT,

@K FLOAT OUTPUT

AS

SELECT@K = Sum (Товары.Цена * Продажи.Количество)

FROM Товар INNER JOINСделка

ONТовары.ID_Товара=Продажи.Товар

GROUP BY Month(Продажи.Дата)

HAVING Month (Продажи.Дата)=@m

Для обращения к процедуре можно использовать команды:

DECLARE @st FLOAT

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