Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
11
Добавлен:
07.02.2016
Размер:
51.2 Кб
Скачать

ЛАБОРАТОРНА РОБОТА №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 у збережених процедурах дозволяє завершити роботу запиту або процедури, а також передати значення зухвалій підпрограмі.

ПОРЯДОК ПРОВЕДЕННЯ ЛАБОРАТОРНОЇ РОБОТИ

  1. Вивчити теоретичні відомості

  2. Визначити збережену процедуру.

  3. Створити нову процедуру.

  4. Використати конструкцію IF – ELSE у збереженій процедурі.

  5. Використати конструкцію BEGIN – END у збереженій процедурі.

  6. Використати конструкцію WHILE у збереженій процедурі.

  7. Предоставити письмовий звіт по роботі.

ПИТАННЯ ДЛЯ САМОПЕРЕВІРКИ

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

  2. Як створити нову збережену процедуру?

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

  4. Як описуються зміння усередені збереженої процедури?

  5. Для чого використовується SELECT?

  6. Яка конструкція забезпечує використання операцій залежно від певної умови?

  7. Як перевірити працездатність створеної процедури?

  8. Яка конструкція використовується для циклічного виконання операцій?

  9. Які оператори використовуються у збережених процедурах? Наведіть приклади.

  10. Для чого використовується конструкція CASE у збережених процедурах?

8

Соседние файлы в папке Учебное пособие