Практична робота 5: Збережені процедури в середовищі SQL Server Management Studio

Мета: навчитися працювати з збереженими процедурами

 

Перейдемо до створення збережених процедур. Для роботи з збереженими процедурами в оглядачі об'єктів необхідно виділити папку "Програмирование / Хранимые процедуры" бази даних "Студент" (рис. 5.1).

Рис. 5.1.

Створюємо процедуру, яка обчислює середнє трьох чисел. Для створення нової збереженої процедури клацніть ПКМ по папці "Хранимые процедуры" і в меню виберіть пункт "Создать хранимую процедуру". З'явитися вікно коду нової збереженої процедури (рис. 5.2).

http://www.intuit.ru/EDI/05_10_15_1/1443997214-25316/tutorial/525/objects/10/files/05-02sm.jpg

Рис. 5.2.

Збережена процедура має наступну структуру:

1.   Область налаштування параметрів синтаксису процедури. Дозволяє налаштовувати деякі синтаксичні правила, використовувані при наборі коду процедури. У нашому випадку це:

·         SET ANSI_NULLS ON - включає використання значень NULL  в кодуванні ANSI,

·         SET QUOTED_IDENTIFIER ON - включає можливість використання подвійних лапок для визначення ідентифікаторів;

2.   Область визначення імені процедури (Procedure_Name) і параметрів переданих в процедуру (@ Param1, @ Param2). Визначення параметрів має наступний синтаксис:

@ <Ім'я параметра> <Тип даних> = <Значення за замовчуванням>

Параметри розділяються між собою комами;

3.   Початок тіла процедури, позначається службовим словом "BEGIN";

4.   Тіло процедури, містить команди мови програмування запитів T-SQL;

5.   Кінець тіла процедури, позначається службовим словом "END".

Зауваження: У коді зеленим кольором виділяються коментарі. Вони не обробляються сервером і виконують функцію пояснень до коду. Рядки коментарів починаються з підрядка "-". Далі в коді, ми не будемо відображати коментарі, вони будуть згорнуті. Зліва від розділу з коментарями стоятиме знак "+", клацнувши по якому можна розгорнути коментар.

Наберемо код процедури обчислює середнє трьох чисел (рис. 5.3).

Рис. 5.3.

Розглянемо код даної процедури більш докладно:

 

1.   CREATE PROCEDURE [Середнє трьох величин] - визначає ім'я створюваної процедури як "Среднее трех величин";

2.   @ Value1 Real = 0, @ Value2 Real = 0, @ Value3 Real = 0 - визначають три параметри процедури Value1, Value2 і Value3. Даним параметрам можна привласнити дробові числа (Тип даних Real), значення за замовчуванням рівні 0;

3.   SELECT 'Середнє значення' = (@ Value1 + @ Value2 + @ Value3) / 3 - обчислює середнє і виводить результат з підписом "Середнє значення".

Решта фрагменти коду розглянуті вище.

Для створення процедури, виконаємо вищеописаний код, натиснувши кнопку

http://www.intuit.ru/EDI/05_10_15_1/1443997214-25316/tutorial/525/objects/10/files/05-pic01.jpg

(Виконати) на панелі інструментів. У нижній частині вікна з кодом з'явитися повідомлення "Выполнение команд успешно завершено.". Закрийте вікно з кодом, клацнувши мишею по кнопці закриття, розташованої у верхньому правому куті вікна з кодом процедури.

Перевіримо працездатність створеної збереженої процедури. Для запуску збереженої процедури необхідно створити новий порожній запит, натиснувши на кнопку

http://www.intuit.ru/EDI/05_10_15_1/1443997214-25316/tutorial/525/objects/10/files/05-pic03.jpg

(Новий запит) на панелі інструментів. У вікні з порожнім запитом наберіть команду EXEC [Среднее трех величин] 1, 7, 9 і натисніть кнопку

http://www.intuit.ru/EDI/05_10_15_1/1443997214-25316/tutorial/525/objects/10/files/05-pic01.jpg

на панелі інструментів.

Рис. 5.4.

У нижній частині вікна з кодом з'явиться результат виконання нової збереженої процедури: Среднее значение 5,66667 (рис. 5.4).

Тепер створимо збережену процедуру для відбору студентів з таблиці студенти по їх "ФИО". Для цього створіть нову збережену процедуру, як це описано вище, і наберіть код нової процедури (рис. 5.5).

Рис. 5.5.

Розглянемо код процедури "Отображение студентов по ФИО" більш докладно:

1.   CREATE PROCEDURE [Отображение студентов по ФИО] - визначає ім'я створюваної процедури як "Відображення студентів по ПІБ";

2.   FIO Varchar (50) = '' - визначають єдиний параметр процедури FIO. Параметру можна привласнити текстові рядки змінної довжини, довгою до 50 символів (Тип даних Varchar (50)), значення за замовчуванням рівні порожній рядку;

3.   SELECT * FROM dbo.Студенты WHERE ФИО= @ FIO - відобразити всі поля (*) з таблиці студенти (dbo.Студенты), де значення поля ФИО дорівнює значенню параметра FIO (ФИО = @ FIO).

Виконаємо вищеописаний код і закриємо вікно з кодом, як описано вище.

Перевіримо працездатність створеної збереженої процедури. Створіть новий порожній запит. У вікні з порожнім запитом наберіть команду EXEC [Отображение студентов по ФИО] 'Иванов И.И.' і натисніть кнопку

http://www.intuit.ru/EDI/05_10_15_1/1443997214-25316/tutorial/525/objects/10/files/05-pic01.jpg

на панелі інструментів.

Рис. 5.6.

У нижній частині вікна з кодом з'явитися результат виконання процедури, що "Отображения студентов по ФИО" (рис. 5.6).

 

Тепер перейдемо до більш складної задачі - відобразити студентів, у яких середній бал вище заданого. Створіть нову збережену процедуру і наберіть код нової процедури (рис. 5.7).

Рис. 5.7.

Розглянемо код процедури "Отображение студентов по среднему баллу" більш докладно:

1.   CREATE PROCEDURE [Отображение студентов по среднему баллу] - визначає ім'я створюваної процедури як "Відображення студентів за середнім балом";

2.   Grade Real = 0 - визначають параметр процедури Grade. Параметру можна привласнити дробові числа (Тип даних Real), значення за замовчуванням рівні 0;

3.   SELECT * FROM [Запрос Студенты + Оценки] WHERE ([Оценка первого экзамена] + [Оценка второго экзамена] + [Оценка третьего экзамена]) / 3>Grade - відобразити всі поля (*) із запиту "Запрос Студенты + Оценки" ( Запрос Студенты + Оценки), де середній бал більше ніж значення параметра Grade (([Оценка первого экзамена] + [Оценка второго экзамена] + [Оценка третьего экзамена]) / 3>Grade).

Виконаємо вищеописаний код і закриємо вікно з кодом, як описано вище. Перевіримо, як працює запит, описаний вище. Для цього, створіть новий запит і в ньому наберіть команду EXEC [Отображение студентов по среднему баллу] 3.5 і виконайте її (рис.5.8).

Рис. 5.8.

У нижній частині вікна з кодом з'явитися результат виконання процедури "Отображение студентов по среднему баллу ".

На закінчення вирішимо більш складне завдання - відображення студентів старше заданого віку. При чому вік буде автоматично обчислюватися в залежності від дати народження. Створимо нову збережену процедуру і наберемо код нової процедури

(рис. 5.9).

http://www.intuit.ru/EDI/05_10_15_1/1443997214-25316/tutorial/525/objects/10/files/05-09sm.jpg

Рис.5.9.

Розглянемо код створюваної процедури "Отображение студентов по возрасту" більш докладно:

1.   CREATE PROCEDURE [Отображение студентов по возрасту] - визначає ім'я створюваної процедури як "Відображення студентів за віком";

2.   Age Int = 0 - визначають параметр процедури Age. Параметру можна привласнити цілі числа (Тип даних int), значення за замовчуванням рівні 0;

3.   ФИО, [Запрос Студенты + Специальности]. [Дата рождения], 'Возрост' = DATEDIFF (yy, [Запрос Студенты + Специальности]. [Дата рождения], GETDATE ()) - відображає із запиту "Запросу Студенты + Специальности" (FROM [Запрос Студенты + Специальности]) поля "ФИО" і "Дата рождения" ([Запрос Студенты + Специальности]. [Дата рождения]), а також відображає вік студента (Возраст) в роках (yy), обчислений виходячи з його дати народження та поточної дати (DATEDIFF (yy, [Запрос Студенты + Специальности]. [Дата рождения], GETDATE ())). Більше того, виводяться Студенты вік яких більше певного в параметрі "Age" (DATEDIFF (yy, [Запрос Студенты + Специальности]. [Дата рождения], GETDATE ())> @ Age).

Зауваження: Вбудована функція DATEDIFF обчислює кількість періодів між двома датами, має наступний синтаксис: DATEDIFF (<період>, <початкова дата>, <кінцева дата>)

Виконаємо код запиту "Отображения студентов по возросту", а потім закриємо вікно з кодом, як описано вище. Перевіримо, як працює запит. Для цього, створимо новий запит і в ньому наберемо команду EXEC [Отображение студентов по возрасту] 26 і виконайте її(рис. 5.10).

 

Рис. 5.10.