Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
О.Б.Д / лекции / 11БД.doc
Скачиваний:
35
Добавлен:
30.05.2020
Размер:
75.26 Кб
Скачать

4 Виконання збереженої процедури

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

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

[[@і’мя_параметра=]{значення | @і’мя_змінної} [OUTPUT ]|[DEFAULT ]][,...n]

Якщо виклик збереженої процедури не є єдиною командою в пакеті, то присутність команди EXECUTE обов'язкова. Більш того, ця команда потрібна для виклику процедури з тіла іншої процедури або тригера.

Використовування ключового слова OUTPUT при виклику процедури дозволяється тільки для параметрів, які були оголошені при створенні процедури з ключовим словом OUTPUT.

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

З синтаксису команди EXECUTE видно, що імена параметрів можуть бути опущені при виклику процедури. Проте в цьому випадку користувач повинен указувати значення для параметрів в тому ж порядку, в якому вони перераховувалися при створенні процедури. Привласнити параметру значення за умовчанням, просто пропустивши його при переліку не можна. Якщо ж вимагається опустити параметри, для яких визначено значення за умовчанням, достатньо явної вказівки імен параметрів при виклику збереженої процедури. Більш того, у такий спосіб можна перераховувати параметри і їх значення в довільному порядку.

Відзначимо, що при виклику процедури указуються або імена параметрів із значеннями, або тільки значення без імені параметра. Їх комбінування не допускається.

Приклад 11.1. Процедура без параметрів. Розробити процедуру для отримання назв і вартості товарів, придбаних Івановим.

CREATE PROC my_proc1

AS

SELECT Товар.Назва Товар.Вартість*Операція.Кількість AS Вартість, Клієнт.Прізвище

FROM Клієнт INNER JOIN (Товар INNER JOIN Операція ON Товар.КодТовара=Операція.КодТовара)

ON Клієнт.КодКлієнта=Операція.КодКлієнта

WHERE Клієнт.Прізвище=’Іванов’

Приклад 11.1. Процедура для отримання назв і вартості товарів, придбаних Івановим.

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

EXEC my_proc1 або my_proc1

Процедура повертає набір даних.

Приклад 11.2. Процедура без параметрів. Створити процедуру для зменшення ціни товару першого сорту на 10%.

CREATE PROC my_proc2

AS

UPDATE Товар SET Вартість=Вартість*0.9

WHERE Сорт=’перший’

Приклад 11.2. Процедура для зменшення ціни товару першого сорту на 10%.

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

EXEC my_proc2 або my_proc2

Процедура не повертає ніяких даних.

Приклад 11.3. Процедура з вхідним параметром. Створити процедуру для отримання назв і вартості товарів, які придбав заданий клієнт.

CREATE PROC my_proc3 @k VARCHAR(20)

AS

SELECT Товар.Назва, Товар.Вартість*Операція.Кількість

AS Вартість, Клієнт.Прізвище

FROM Клієнт INNER JOIN (Товар INNER JOIN Операція ON Товар.КодТовара=Операція.КодТовара) ON Клієнт.КодКлієнта=Операція.КодКлієнта

WHERE Клієнт.Прізвище=@k

Приклад 11.3. Процедура для отримання назв і вартості товарів, які придбав заданий клієнт.

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

EXEC my_proc3 'Іванов' або

my_proc3 @k='Іванов'

Приклад 11.4. Процедура з вхідними параметрами. Створити процедуру для зменшення ціни товару заданого типу відповідно до вказаного %.

CREATE PROC my_proc4 @t VARCHAR(20) @p FLOAT

AS

UPDATE Товар SET Вартість=Вартість*(1-@p) WHERE Тип=@t

Приклад 11.4. Процедура для зменшення ціни товару заданого типу відповідно до вказаного %.

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

EXEC my_proc4 'Печиво',0.05 або

EXEC my_proc4 @t='Печиво', @p=0.05

Приклад 11.5. Процедура з вхідними параметрами і значеннями за умовчанням. Створити процедуру для зменшення ціни товару заданого типу відповідно до вказаного %.

CREATE PROC my_proc5 @t VARCHAR(20)=’Цукерки’ @p FLOAT=0.1

AS

UPDATE Товар SET Вартість=Вартість*(1-@p)

WHERE Тип=@t

Приклад 12.5. Процедура з вхідними параметрами і значеннями за умовчанням. Створити процедуру для зменшення ціни товару заданого типу відповідно до вказаного %.

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

EXEC my_proc5 'Печиво',0.05 або

EXEC my_proc5 @t='Печиво', @p=0.05 або

EXEC my_proc5 @p=0.05

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

EXEC my_proc5

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

Приклад 12.6. Процедура з вхідними і вихідними параметрами. Створити процедуру для визначення загальної вартості товарів, проданих за конкретний місяць.

CREATE PROC my_proc6 @m INT @s FLOAT OUTPUT

AS

SELECT @s=Sum(Товар.Вартість*Операція.Кількість)

FROM Товар INNER JOIN Операція

ON Товар.КодТовара=Операція.КодТовара

GROUP Month(Операція.Дата)

HAVING Month(Операція.Дата)=@m

Приклад 11.6. Процедура з вхідними і вихідними параметрами. Створити процедуру для визначення загальної вартості товарів, проданих за конкретний місяць.

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

DECLARE @st FLOAT

EXEC my_proc6 1,@st OUTPUT

SELECT @st

Цей блок команд дозволяє визначити вартість товарів, проданих в січні (вхідний параметр місяць вказаний рівним 1).

Створити процедуру для визначення загальної кількості товарів, придбаних фірмою, в якій працює заданий співробітник.

Спочатку розробимо процедуру для визначення фірми, де працює співробітник.

CREATE PROC my_proc7 @n VARCHAR(20) @f VARCHAR(20) OUTPUT

AS

SELECT @f=Фирма

FROM Клієнт

WHERE Прізвище=@n

Приклад 11.7. Використовування вкладених процедур. Створити процедуру для визначення загальної кількості товарів, придбаних фірмою, в якій працює заданий співробітник.

Потім створимо процедуру, що підраховує загальну кількість товару, який закуплений фірмою, що цікавить нас.

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 Клієнт.КодКлієнта=Операція.КодКлієнта

GROUP Клієнт.Фірма

HAVING Клієнт.Фирма=@firm

Приклад 11.7. Створення процедури для визначення загальної кількості товарів, придбаних фірмою, в якій працює заданий співробітник.

Виклик процедури здійснюється за допомогою команди:

DECLARE @k INT

EXEC my_proc8 ‘Іванов’,@k OUTPUT

SELECT @k

Контрольні питання

  1. Дайте визначення збереженої процедури.

  2. В чому полягає призначення збережених процедур?

  3. Які переваги використання збережених процедур ви можете назвати?

  4. Чим є збережена процедура з точки зору мови SQL?

  5. Хто має право створити збережену процедуру?

  6. Хто має право на зміну коду збереженої процедури?

  7. Які типи збережених процедур ви можете назвати?

  8. В чому особливість іменування і використання кожного з типів збережених процедур?

  9. Які задачі можна вирішити, використовуючи збережені процедури?

  10. Поясніть параметри формального синтаксису створення збереженої процедури.

  11. Яким чином можна виконати збережену процедуру?

  12. Поясніть параметри формального синтаксису виконання збереженої процедури.

Соседние файлы в папке лекции