Студопедия

Главная страница Случайная страница

Разделы сайта

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






Лекция 11






Примеры реализации операторов SPL в различных СУБД

Управляющие операторы, используемые в процедурах и триггерах (WATCOM SQL)

 

Составной оператор: BEGIN [ ATOMIC ]

statement-list

END

 

Оператор проверки условия: IF

 

IF condition THEN

statement-list

[ ELSEIF condition THEN

statement-list

ELSE statement-list ]

END IF

 

Выбор одного варианта среди множества альтернатив: оператор CASE

 

CASE value-expression

... WHEN [ constant | NULL ] THEN

statement-list...

... [ WHEN [ constant | NULL ] THEN statement-list ]...

... ELSE statement-list

... END CASE

 

 

Операторы циклов.

 

Цикл с предусловием: WHILE, LOOP

Повторяет набор операторов до тех пор, пока истинно условие.

 

WHILE condition LOOP

statement-list

END LOOP

 

Оператор цикла FOR

Выполняет набор операторов для каждой записи курсора.

[ statement-label: ]

 

...FOR for-loop-name AS cursor-name

... CURSOR FOR statement

...[ FOR UPDATE | FOR READ ONLY ]

... DO statement-list

... END FOR [ statement-label ]

 

Оператор FOR эквивалентен составному оператору с оператором DECLARE для определения курсора и оператора DECLARE для каждого столбца результирующего набора. Оператор выбирает записи из курсора в локальные переменные и выполняет операторы для каждой записи.

 

Оператор LEAVE

Оператор LEAVE прерывает выполнение составного оператора или оператора цикла.

 

Оператор CALL – выполняет вызов хранимой процедуры.

 

[variable = ] CALL procedure-name ([ expression,... ])

 

[variable = ] CALL procedure-name ([ parameter-name = expression,... ])

Для вызова процедуры необходимо быть владельцем процедуры или иметь право на ее выполнение (или обладать правами DBA).

Список аргументов может быть либо в позиционном формате или в формате с указанием имен параметров.

 

Процедуры могут возвращать значение (например, как индикатор статуса) используя оператор RETURN. Полученное значение можно присвоить переменной для дальнейшего использования.

 

CREATE VARIABLE returnval INT;

 

returnval = CALL proc_integer (arg1 = val1,...)

 

 

Управляющие операторы Transact-SQL

Управляющие операторы - необходимый инструмент любого языка программирования Очень часто нужно иметь возможность в зависимости от ситуации выбрать код, который будет выполняться. T-SQL предлагает несколько классических вариантов управления холл выполнения процедур:

BEGIN … END

 

IF...ELSE

 

GOTO

 

WHILE

 

WAITFOR

 

Существуют также CASE-конструкции (наподобие SELECT CASE, DO CASE, SWITCH/BREAK в других языках), но они не предоставляют достаточных возможностей управления, как это имеет место в других языках программирования.

 

Оператор CASE

Оператор CASE имеет свои аналоги в других языках программирования. Вот примеры операторов процедурных языков, которые используются аналогично оператору CASE:

Switch - С, C++, Delphi;

Select Case - Visual Basic;

Do Case - Xbase;

Evaluate - COBOL.

У оператора CASE в T-SQL есть существенный недостаток: во многих отношениях он является оператором подстановки, а не управляющим оператором.

Eстъ два варианта оператора CASE - с исходным и с булевым выражением. В первом варианте исходное выражение сравнивается с выражением, указанным в каждом элементе WHEN. В документации к SQL Server такой вариант называется простой CASE (simple):

CASE < исходное_выражение>

WHEN < when_выражение> THEN < выражение_результат>

[…n]

[ELSE < выражение_результат> ]

END

В рамках второго варианта условное выражение в каждом элементе WHEN оценивается как булево (TRUE или FALSE). В документации этот вариант упоминается как анализируемый CASE (searched):

CASE

WHEN < булево_выражение> THEN < выражение_результат>

[…n]

[ELSE < выражение_резулътат> ]

END

Допускается использование оператора CASE внутри оператора SELECT. Эта возможность служит основой эффективного программирования.

 

 

Простой оператор CASE

В простом операторе CASE результатом проверки условия является булево значение. Давайте сразу начнем с примера:

USE Northwind

GO

SELECT TOP 10 OrderID, OrderlD % 10 AS 'Последняя цифра', Position =

CASE OrderID % 10

WHEN 1 THEN 'Единица’

WHEN 2 THEN 'Двойка'

WHEN 3 THEN 'Тройка'

WHEN 4 THEN 'Четверка'

ELSE 'Какая-то другая'

END D

FROM Orders

Создание циклов с помощью оператора WHILE

Оператор WHILE устроен точно так же, как и в других языках программирования. Условие проверяется каждый раз в начале.цикла. Цикл повторяется до тех пор, пока условие истинно.

Синтаксис:

WHILE < булево выражение>

< SQL-оператор> |

[BEGIN

< блок_операторов>

[BREAK]

< sql-oператор> | < блок_операторов>

[CONTINUE]

END]

Конечно, можно использовать простой оператор WHILE с одним исполняемым sql-оператором также как это можно делать и с оператором IF), однако на практике этот оператор почти всегда используется с блоком операторов внутри BEGIN...END.

 

оператор BREAK используется для немедленного выхода из цикла, не дожидаясь его конца.

Использование оператора BREAK относится к образцам плохого стиля программирования.

Оператор CONTINUE является противоположностью оператора BREAK. Он указывает, что нужно вернуться в начало цикла. Независимо от того, где вы находились в момент выполнения этого оператора, вы немедленно возвращаетесь в начало. При этом опять производится проверка условия на истинность (выход из цикла происходит после того, как условие перестает выполняться).

Оператор WAITFOR

Иногда необходимо сделать паузу и приостановить выполнение кода на некоторое время при этом хочется, чтобы пауза завершалась автоматически без какого-либо вмешательства пользователя.

Для этого используется оператор WAITFOR.

Синтаксис этого оператора очень прост:

WAITFOR

DELAY < 'время'> | TIME < 'время'>

В качестве параметра можно указывать время суток, когда следует выполнить некоторую операцию (вариант TIME), или просто промежуток времени, по истечении которого должно совершиться какое-либо действие (вариант DELAY).

 

Параметр DELAY

Параметр DELAY определяет промежуток времени, истечения которого необходимо ждать. Нельзя указывать время в днях - только часы, минуты, секунды. Максимальная задержка может составлять 24 часа. Например, можно написать:

• WAITFOR DELAY '01: 00'

В результате код сценария будет выполняться вплоть до оператора WAITFOR, затем будет останов на 1 час, после этого выполнение кода будет продолжено со следующего оператора.

Параметр TIME

Параметр TIME определяет время суток, которого следует ждать. Опять же, нельзя указывать дату - только время суток в 24-часовом формате. Отсюда следует, что продолжительность задержки не может быть больше одних суток. Например:

WAITFOR TIME '01: 00'

До оператора WAITFOR будет выполняться любой код, затем будет останов до 1 часа ночи, после этого выполнение кода будет продолжено с оператора, следующего после оператора WAITFOR.

 

Подтверждение удачного или неудачного выполнения процедуры

с помощью возвращаемого значения

 

На практике ваша программа получает возвращаемое значение, независимо от того генерируете вы его или нет. При завершении процедуры SQL Server по умолчанию возвращает нулевое значение.

Для того чтобы передать из процедуры возвращаемое значение вызывавшему коду, нужно просто использовать в процедуре оператор RETURN:

 

RETURN [ < целое_возвращаемое_значение> ]

 

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.