Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие.doc
Скачиваний:
57
Добавлен:
14.05.2015
Размер:
1.51 Mб
Скачать

3. Операторы языка управления программой. Опера­тор declare

Язык управления программой придаёт хранимым проце­дурам дополнительные возможности, которых нет в стандартном варианте Transact-SQL, например, выполнение циклов и анализ значений переменных. К операторам языка управления програм­мой относятся:

GOTO метка

BEGIN…END

IF…ELSE

WAITFOR

RETURN

WHILE

BREAK

CONTINUE

К расширениям Transact-SQL относятся операторы:

DECLARE PRINT RAISERROR

Оператор DECLARE – с его помощью можно создавать переменные, используя стандартные типы данных SQL Server. Переменные, определяемые оператором DECLARE, должны на­чинаться с символа @. В одном операторе можно объявить не­сколько переменных, разделяя их запятыми. Синтаксис оператора DECLARE:

DECLARE @переменная1 тип_данных [,переменная2 тип_данных…]

Пример создания трех переменных различных типов дан­ных:

DECLARE @count INT, @current_date DATETIME

DECLARE @ My_Message VARCHAR (255)

Чтобы инициализировать или установить значения пере­менной, создаваемой с помощью оператора DECLARE, исполь­зуется ключевое слово SELECT, например, для установления значения переменной @count, равным 100:

SELECT @count=100

Чтобы установить значение @count равным общему числу строк в таблице authors БД pubs:

SELECT @count= count (*)

FROM pubs.authors

4. Операторы goto, begin…end и if…else

Оператор GOTO – передает управление соответствую­щей метке хранимой процедуры, с которой будет продолжено выполнение операторов. Синтаксис:

GOTO метка

Пример - оператор GOTO пропускает оператор SELECT и выполняет оператор UPDATE:

GOTO do­­­­_update

SELECT * from authors

do­­­­_update:

UPDATE authors

SET au_lname= “Spenik’

WHERE state=’VA’

При определении метки её имя должно оканчиваться двое­точием, а при ссылке на имя в GOTO двоеточие не ставится.

Оператор BEGIN…END объединяет набор операторов SQL и операторов языка управления программой в единое целое. Синтаксис:

BEGIN

{оператор SQL | блок операторов}

END

Оператор IF…ELSE служит для проверки условий и в за­висимости от результатов проверки выполняет соответствующие операторы SQL. Оператор IF проверяет выражение типа BOOLEAN, если возвращаемое значение = TRUE, выполняется блок операторов, следующий за оператором IF, иначе выполня­ется необязательный оператор ELSE. Синтаксис:

IF выражение_ типа _ BOOLEAN

{Операторы SQL | блок операторов}

[ELSE [выражение_ типа _ BOOLEAN]

{Операторы SQL | блок операторов}

Примеры (используется как одиночный оператор SQL, так и блок операторов):

1) IF @count=0

SELECT * FROM authors

ELSE

SELECT * FROM titles

2) IF @Total ! =0

BEGIN

SELECT count (*) FROM authors

SELECT count (*) FROM titles

END

ELSE

BEGIN

SELECT * FROM authors

SELECT * FROM titles

END

5. Операторы waitfor, return, while, break и continue

Оператор WAITFOR – формирует задержку, в течении которой хранимая процедура находится в состоянии ожидания. Величина задержки определяется либо заданным интерва­лом времени (с помощью опции DELAY), либо интервалом до наступления заданного времени суток (с помощью опции TIME). По истечении времени задержки выполнение хранимой проце­дуры продолжается. Синтаксис:

WAITFOR {DELAY ‘интервал времени’ | TIME ‘время су­ток'}

Максимальное время задержки, формируемое оператором WAITFOR, составляет 24 часа. В опциях DELAY и TIME ис­пользуется формат :чч:мм:сс.

Примеры:

1) формируется десятисекундная задержка:

WAITFOR DELAY ’00:00:10’

2) состояние ожидания продлится до 11 часов утра:

WAITFOR TIME ’11:00:00’

Оператор RETURN – выполняет выход из хранимой про­цедуры и обеспечивает возврат в вызывающую процедуру или при­ложение. Синтаксис:

RETURN [Целое_значение]

Целое значение можно вернуть в вызывающую процедуру или приложение, используя следующий синтаксис:

Exec @ status=имя_процедуры

При написании хранимых процедур нулевое значение (0) используется для индикации факта успешного завершения. Отри­цательные значения свидетельствуют о возникновении ошибок. Коды возврата от -1 до – 99 зарезервированы для SQL Server. С помощью RETURN можно возвращать только целые значения. Если не нужно возвращать данные других типов, необходимо ис­пользовать параметры хранимой процедуры.

Зарезервированные коды возврата хранимых проце­дур:

Значение

Описание

0

Процедура выполнилась ус­пешно

-1

Отсутствует объект

-2

Несоответствие типа данных

-3

Процесс «завис»

-4

Ошибка доступа

-5

Синтаксическая ошибка

-6

Пользовательская ошибка

-7

Ошибка ресурса (нехватка па­мяти)

-8

Не фатальная внутренняя про­блема

-9

Достигнуто системное ограни­чение

-10

Фатальная внутренняя про­блема

-11

-12

Повреждена таблица или ин­декс

-14

Аппаратный сбой

Операторы WHILE, BREAK и CONTINUE

С помощью оператора WHILE можно циклически выпол­нять один оператор SQL или блок операторов до тех пор, пока соблюдается заданное условие. Оператор BREAK вызывает вы­ход из цикла WHILE, а оператор CONTINUE – безусловный пе­реход к началу цикла, пропуская все операторы, стоящие за опе­ратором CONTINUE. Эти операторы имеют следующий формат.

WHILE выражение_ типа _ BOOLEAN

{оператор SQL | блок операторов}

[BREAK | CONTINUE]