Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Цикл WHILE.

Оператор IF.

 

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

Наступна конструкція дозволяє визначити виконання операцій залежно від певної умови:

 

IF вираз

оператори

[ELSE]

[IF вираз

оператори]

 

Наприклад, необхідно виконати операцію індексації стипендії студента тільки в тому випадку, якщо він відвідував заняття по певному предмету. Для цього в збережену процедуру будуть передаватися три параметри: @SNUM_PM - номер студентського квитка, @PNUM_PM - код предмета й @IND_KF - відсоток індексації стипендії. SQL код створення даної процедури IND_STIP_PREDMET буде мати такий вигляд:

 

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)

UPDATE STUDENTS SET STIP = STIP * @IND_KF

 

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

 

EXEC IND_STIP_PREDMET @SNUM_PM = 3412, @PNUM_PM = 2001, @IND_KF = 2

 

Операторні дужки BEGIN...END.

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

 

BEGIN

оператори

END

 

Наприклад, якщо в наведеній процедурі IND_STIP_PREDMET потрібно додати операцію видалення інформації про оцінку студента, що задовольняє поставленій умові, то текст цієї процедури буде мати вигляд:

 

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

UPDATE 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

 

У цьому випадку нам потрібні були дві додаткові змінні, для оголошення яких використовується директива DECLARE. Для присвоювання значень змінним використовується ключове слово SELECT. Оператор PRINT дозволяє видати текстове повідомлення на пристрій виводу.

В операторі WHILE можна також використовувати ключові слова BREAK, CONTINUE, мітки й оператор переходу GOTO. Розглянутий вище приклад з використанням міток буде мати такий вигляд:

 

CREATE PROCEDURE GOTOFACTORIAL @N INT

AS

DECLARE @X INT

DECLARE @I INT

SELECT @I = 1

SELECT @X =1

METKA:

SELECT @X = @X * @I

SELECT @I = @I + 1

IF @I <= @N GOTO METKA

PRINT ' Отримано факторіал:'

PRINT @X




Переглядів: 659

<== попередня сторінка | наступна сторінка ==>
Збережені процедури. | Клас CHttpServer.

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

  

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.03 сек.