Учебное пособие / Lab7
.docЛАБОРАТОРНА РОБОТА №7
ТЕМА РОБОТИ: Збережені процедури й оператори керування.
МЕТА РОБОТИ: Навчитися використовувати збережені процедури й оператори керування.
ТЕОРЕТИЧНІ ВІДОМОСТІ
Збережені процедури – це процеси, виконання яких відбувається безпосередньо на сервері баз даних. Для розгляду цих процедур скористаємося утілитою SQL-Server Enterprise Manager.
Для створення нової процедури виберіть команду New Stored Procedures меню Action, після чого на екрані відобразиться діалогове вікно, де буде розташована область для уведення тексту процедури.
Для приклада створимо нову збережену процедуру, після чого системою буде запропанована SQL-команда, використована для створення процедури:
CREATE PROCEDURE [PROCEDURE NAME] AS
Тут замість тексту [PROCEDURE NAME] необхідно ввести ім’я створюваної процедури, після чого набрати текст її команд. У нашему прикладі використаємо команду UPDATE, що дозволяє змінювати дані в таблицях. Текст процедури NEW_COURS, що реалізує дану дію буде мати вигляд:
CREATE PROCEDURE NEW_COURS AS
UPDATE PREDMET
SET COURS=COURS + 1
Перевіримо працездатність даної процедури. Для цього запустите утиліту SQL-Server Query Analyzer, після чого здійсните підключення до необхідного сервера баз даних. Виберіть базу даних EDUCATION у списку, що випадає. Після чого введіть наступні команди:
EXEC NEW_COURS
SELECT * FROM PREDMET
За допомогою команди EXEC здійснюється запуск збережених процедур.
Наступний приклад буде використати в процесі роботи передані параметри. Завданням процедури є збільшення значень стипендії на певний відсоток при вказівці суми, для якої буде зроблена індексація.
Для рішення данного завдання створимо нову збережену процедуру:
CREATE PROCEDURE IND_STIP_KF
(@KF_INDEX REAL, @FOR_SUM SMALLMONEY)
AS
UPDATE STUDENTS
SET STIP=STIP*@KF_INDEX
WHERE STIP= @FOR_SUM
Кожна змінна усередені збереженої процедури описується в такий спосіб: @ім’я_змінної тип_даних. Якщо передається кілька параметрів, то вони вказуються через кому в дужках після імені.
SQL-команда, що виконує запуск процедури IND_STIP_KF виглядає в такий спосіб:
EXEC IND_STIP_KF @KF_INDEX=1.2, @FOR_SUM 125.5
SELECT * FROM STUDENTS
Використання команди SELECT при запуску не є обов’язковим, тут вона вживається для перевірки зроблених операцій.
Наступна конструкція дозволяє визначити використання операцій залежно від певної умови:
IF вираження
оператори
[ELSE]
[IF вираження]
оператори
Наприклад, необхідно виконати операцію індексування стипендії студента тільки в тому випадку, якщо їм відвідувалися заняття по певному предмету. У збережену процедуру будуть передаватися три параметри: @SNUM_PM –номер студентського білета, @PNUM_PM – код предмета, @IND_KF – відсоток індексації стіпендії.
CREATE PROCEDURE IND_STIP_PREDMET
(@SNUM_PM INT,
@PNUM_PM SMALLINT,
@IND_KF REAL)
AS
IF EXISTS (SELECT SNUM, PNUM FROM USP
WHERE SNUM=@SNUM_PM
AND PNUM=@PNUM_PM)
UPDUTE STUDENTS
SET STIP=STIP*@IND_KF
Завдяки ключовому слову EXISTS перевіряється наявність даних, обумовлених предикатом.
Для перевірки працездатності даної процедури здійсните її запуск у такий спосіб:
EXEC IND_STIP_PREDMET @SNUM_PM =3412,
@PNUM_PM=2001, @IND_KF=2)
та
EXEC IND_STIP_PREDMET @SNUM_PM =3414,
@PNUM_PM=2003, @IND_KF=2)
Якщо є необхідність у використанні декількох підряд операторів, то в цьому випадку необхідно скористатися наступною конструкцією:
BEGIN
оператори
END
Наприклад, якщо потрібно додати операцію видалення інформації про оцінку студента, задовольняючій представленій умові, то текст цієї процедури буде мати такий вигляд:
CREATE PROCEDURE IND_STIP_PREDMET
(@SNUM_PM INT,
@PNUM_PM SMALLINT,
@IND_KF REAL)
AS
IF EXISTS (SELECT SNUM, PNUM FROM USP
WHERE SNUM=@SNUM_PM
AND PNUM=@PNUM_PM)
BEGIN
UPDUTE STUDENTS
SET STIP=STIP*@IND_KF
DELETE FROM USP
WHERE PNUM=@PNUM_PM
AND SNUM=@SNUM_PM)
END
Циклічне виконання операцій у збережених процедурах зручно організовувати за допомогою наступної структури:
WHILE
логічне вираження
оператори
Розглянемо приклад:
CREATE PROCEDURE FACTORIAL @N INT
AS
DECLARE @X INT
DECLARE @I INT
SELECT @I = 2
SELECT @X = 1
WHILE @I<=@N
BEGIN
SELECT @X = @X * @I
SELECT @I = @I + 1
END
PRINT ‘ОТРИМАНИЙ ФАКТОРИАЛ:’
PRINT @X
Оператор PRINT дозволяє видати текстове повідомлення на пристрій уведення, у нашому випадку на екран. В операторі WHILE можна також використати ключове слово BREAK, що дозволяє перервати виконання цього циклу. Тут також може використатися ключове слово CONTINUE, що дозволяє продовжити виконання операторів, що втримуються усередині конструкції WHILE.
У збережених процедурах також можна використати мітки й оператор переходу між ними GOTO. Розглянутий вище приклад з використанням даної можливості буде мати вигляд:
CREATE PROCEDURE FACTORIAL @N INT
AS
DECLARE @X INT
DECLARE @I INT
SELECT @I = 1
SELECT @X = 1
МІТКА:
SELECT @X = @X * @I
SELECT @I = @I + 1
IF @I<=@N GOTO МІТКА
PRINT ‘ОТРИМАНИЙ ФАКТОРИАЛ:’
PRINT @X
У збережених процедурах використається також конструкція CASE, що реалізує вибір одного з декількох значень. Розглянемо приклад:
CREATE PROCEDURE PROVERKA @N TINYINT
AS
BEGIN
DECLARE @X REAL
SELECT @X =
CASE @N
WHEN 1 THEN 17
WHEN 2 THEN 25.5
WHEN 3 THEN 4
ELSE 0
END
PRINT ‘установлена стипендія:’
PRINT @X
END
Використання оператора RETURN у збережених процедурах дозволяє завершити роботу запиту або процедури, а також передати значення зухвалій підпрограмі.
ПОРЯДОК ПРОВЕДЕННЯ ЛАБОРАТОРНОЇ РОБОТИ
-
Вивчити теоретичні відомості
-
Визначити збережену процедуру.
-
Створити нову процедуру.
-
Використати конструкцію IF – ELSE у збереженій процедурі.
-
Використати конструкцію BEGIN – END у збереженій процедурі.
-
Використати конструкцію WHILE у збереженій процедурі.
-
Предоставити письмовий звіт по роботі.
ПИТАННЯ ДЛЯ САМОПЕРЕВІРКИ
-
Дайте визначення терміну “збережені процедури”.
-
Як створити нову збережену процедуру?
-
Яка команда використовується для запуску збережених процедур?
-
Як описуються зміння усередені збереженої процедури?
-
Для чого використовується SELECT?
-
Яка конструкція забезпечує використання операцій залежно від певної умови?
-
Як перевірити працездатність створеної процедури?
-
Яка конструкція використовується для циклічного виконання операцій?
-
Які оператори використовуються у збережених процедурах? Наведіть приклади.
-
Для чого використовується конструкція CASE у збережених процедурах?