Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Условное выполнение.




 

Конструкция IF…ELSE используется для организации ветвлений внутри процедуры. Ее обобщенная синтаксическая диаграмма выглядит следующим образом:

 


Примеры использования условных конструкции можно посмотреть в разделе о триггерах – в хранимых процедурах они используются точно так же, за исключением необходимости заключать составные операторы в блоки инструкций.

 

Циклы.

 

Еще одним базовым элементом программирования хранимых процедур являются циклические структуры – конструкции для многократного выполнения группы инструкций. Циклы бывают:

· Параметрические – со счетчиком итераций (цикл FOR).

· С пост- или предпроверкой – условие продолжения цикла проверяется в начале или в конце группы составляющих его инструкций.

Обобщенная синтаксическая диаграмма построения циклических конструкций представлена на рисунке ниже:

 
 

 

 


Для иллюстрации всего вышесказанного создадим хранимые процедуры на диалекте Transact-SQL, использующую оба типа описанных конструкций. Для создания процедуры будем использовать БД “Зарплата”, состоящую из одной таблицы:

 

 

Oklad

id INT Ключ
FIO CHAR Ф.И.О. сотрудника
otdel CHAR Отдел сотрудника
zarplata INT Зарплата

Теперь предположим, что вышло постановление директора предприятия, в котором сказано, что нужно повысить зарплату сотрудникам, у которых она меньше 6000р., до такого уровня, чтобы средняя зарплата на предприятии была не меньше 5500р. Процедура, реализующая необходимые для этого действия выглядит следующим образом:

 

CREATE PROCEDURE setNewZarplata

AS

BEGIN

WHILE (SELECT AVG(zarplata) FROM oklad) < 5500

BEGIN

UPDATE oklad

SET zarplata = zarplata + 200

WHERE zarplata < 6000

END

END;

 

В данной процедуре в принципе блок BEGIN…END в цикле не обязателен, т.к. его тело состоит из одной инструкции SQL, но большинство циклов в Transact-SQL его содержат.

Следующая процедура добавит префикс названия предприятия (который передается в процедуру в качестве параметра “@firm_name” ) к названию отдела, которое передается в процедуру в качестве параметра “@otdel_name”), в тех случаях, когда название этого отдела его не содержат. В случае, если название отдела обновлено, процедура возвращает ноль, если же обновление не требуется (название уже содержит нужный префикс) – единицу:

 

CREATE PROCEDURE setNewOtdelsNames

@firm_name CHAR(20)

@otdel_name CHAR(20)

AS

BEGIN

IF (SUBSTRING(@otdel_name, 1, LEN(@firm_name)) <> @firm_name)

THEN

BEGIN

UPDATE oklad

SET otdel = @firm_name || otdel

WHERE otdel = @otdel_name

RETURN 0

END

ELSE

BEGIN

RETURN 1

END

END;

 

Приведенная выше процедура использует две встроенные в MS SQL Server функции:

· SUBSTRING(str, index, count) – возвращает <count> символов из исходной строки <str>, начиная с символа с номеров <index>.

· LEN(str) – возвращает длину строки <str>.

 

Также в данной процедуре используется операция конкатенации (“слияния”) строк, которая в MS SQL Server обозначается символами || (две подряд идущие вертикальные черты).

Более полные сведения по функциям, операторам и другим возможностям MS SQL Server и диалекта Transact-SQL можно получить в поставляемой вместе с ним справке. В MS SQL Server 2000 это файл “TSQLREF.CHM”.

 

 


Поделиться:

Дата добавления: 2015-04-04; просмотров: 67; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты