Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Посібник Мова SQL кредитно-модульний.doc
Скачиваний:
35
Добавлен:
01.05.2015
Размер:
1.25 Mб
Скачать

Приклади роботи зі збереженими процедурами

У цій вправі ми створимо збережену процедуру в базі даних Northwindі переконаємося в тім, що вона дійсно створена. Далі ми виконаємо, змінимо і видалимо цю процедуру.

Створення збереженої процедури в базі даних Northwind

USE northwind

GO

CREATE PROCEDURE dbo.CustOrderHistRep

@Customer_ID char(5)

AS

SELECT ContactName, ContactTitle

FROM Customers WHERE CustomerID = @CustomerID

SELECT ProductName, Total=SUM(Quantity)

FROM Products P, [Order Details] OD, Orders O, Customers C WHERE

C.CustomerID = @CustomerID AND C.CustomerID = O.CustomerID

AND O.OrderID = OD.OrderID AND OD.ProductID = P.ProductID

GROUP BY ProductName

GO

При виконанні першого пакета база Northwindстає поточною. Далі створюється процедураCustOrderHistRepі визначається єдиний вхідний параметр -CustomerID.

Вхідний параметр може розташовуватися в одному рядку з оператором CREATE PROCEDURE, але тут для ясності він перенесений в окремий рядок. Аналогічний підхід використаний далі при розбивці на рядки коду операторівSELECT. Зверніть увагу, що для параметра@CustomerIDзаданий тип данихchar(5).Якщо виконати запит до таблиці[northwind].[dbo].[customers], то видно, що довжина всіх ідентифікаторів покупців дорівнює п'яти символам. Рядок, у якій перебуває єдине ключове словоAS, є розділовою лінією між створенням процедури в таблиціSysObjectsі текстом процедури, що зберігають у таблиціSysComments.

Переглянете оператори SELECT, які розташовані нижче ключового словаAS, але не витрачайте на це занадто багато часу. При виконанні запиту у відповідь на уведення ідентифікатора покупця перший операторSELECTвиводить ім'я контактної особи й заголовок контактної інформації. Другий операторSELECTвиводить назви і загальну кількість (SUM) кожного товару, що придбав покупець. Результуючий набір повертає дані, згруповані за назвою товару. Можна помітити, що кілька з'єднань реалізовано в конструкціїWHERE, а неFROM. Під час модифікації процедури ми перемістимо виразJOINу конструкціюFROM.

Виконаємо створений код у вікні редактору запитів.

Далі виконаємо наступну команду:

sp_depends custorderhistrep

Збережена системна процедура sp_depends перевіряє процедуруCustOrderHistRep, щоб визначити її залежності. Зверніть увагу на наявність у полеNameповторюваних елементів. Однак всі записи з повторюваними елементами відрізняються значеннями інших полів.

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

Уведемо і виконаємо наступну команду:

EXEC [northwind].[dbo],[custorderhistrep]

@CustomerID = 'thecr'

Для запуску збереженої процедури CustOrderHistRepвикористана скорочена версія ключового словаEXECUTEEXEC. Зверніть увагу на використання повного імені. Це не обов'язково, але в цьому випадку такий прийом дозволяє запустити процедуру, не роблячи активної базу данихNorthwind.

Повертаються два результуючі набори. Перший з них (ім'я контактної особи й заголовок контактної інформації) виводиться у верхній частині панелі Results. Другий результуючий набір (назва й кількість товару) відображається в нижній частині панеліResults.

Модифікація збереженої процедури

USE Northwind

GO

ALTER PROCEDURE dbo.CustOrderHistRep

@CustoirerID char(5)

AS

SELECT ContactName, ContactTitle

FROM Customers WHERE CustornerID = @CustomerID

SELECT ProductName. Total=SUM(Quantity)

FROM Products P. [Order Details] OD, Orders O. Customers C

WHERE

C. CustomerID = @CustomerID AND C.CustomerID = O. Customer_ID

AND O.OrderID = OD.OrderID AND OD.ProductID = P.ProductID

GROUP BY ProductName

ORDER BY Total DESC

GO

У наведеному коді по відношенню до попереднього можна бачити декілька відмінностей:

  • Замінене ключове слово CREATEнаALTER. При зміні тексту процедури ключове словоALTERдозволяє змінювати збережену процедуру без втрати будь-яких її властивостей.

  • З метою відсортування кількість замовлень по убуванню додано наступний оператор: ORDER BY Total DESC

Виконаємо запит.

Щоб переконатися, що потрібні зміни внесені виконаємо наступний оператор о продивимося результати:

sp_helptext custorderhistrep

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

DROP PROCEDURE dbo.custorderhistrep