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

SQL_LektsiiRus

.pdf
Скачиваний:
8
Добавлен:
12.02.2016
Размер:
2.1 Mб
Скачать

4МОВА ПРОГРАМУВАННЯ У SQL – СЕРВЕРІ

Вязыке T-SQL имеются средства управления ходом выполнения программы, а

именно:

Оператор IF. . .ЕLSЕ; Оператор GОТО; Оператор WHILE; Оператор SWITCH; Оператор WAITFOR Оператор TRY/CАТН.

Оператор IF. . .ЕLSЕ имеет следующий синтаксис:

В качестве выражения <Вооlean Ехрression> может быть задано практически любое выражение, результат вычисления которого приводит к возврату булева значения.

неправильное использование NULL--значений.

Это выражение никогда не может принять истинное значение в большинстве систем (как описано ниже), и в конечном итоге пропускаютcя все значения переменной Я1утаг, равные МО11.

Вместо этого в качестве указанного оператора следует использовать такую конструкцию:

вместо операции = необходимо использовать операцию IS.

Следует учитывать, что выполняемым по условию считается только тот оператор, который непосредственно следует за оператором IF (ближайшим к нему). Вместо одного оператора можно предусмотреть выполнение по условию нескольких операторов, включив их в состав блока управления процессом выполнения с помощью конструкции ВЕGIN. . . ЕND.

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

Синтаксическая структура оператора САSЕ имеет две формы — с входным выражением или с булевым выражением. В первой форме используется входное выражение, которое сравнивается со значением, заданным в каждой из нескольких

конструкций WНЕN. В документации оператор в этой форме именуется простым оператором САSЕ:

Во втором варианте синтаксической структуры в каждой конструкции WНЕN должно быть предусмотрено выражение, вычисление которого приводит к получению значения ТRUE или FALSЕ. В документации оператор в этой форме называется поисковым оператором САSЕ:

По-видимому наиболее удобной особенностью оператора САSЕ является то, что он может использоваться как ―встроенный‖ в оператор SELЕСТ (т.е. может составить неотъемлемую часть указанного оператора). Благодаря этому с помощью оператора САSЕ можно создавать весьма мощные конструкции.

Простой оператор САSЕ

В основе простого оператора САSЕ лежит входное выражение, <inрut ехрression>, вычисление которого приводит к получению однозначного результата. пример:

При обнаружении любого значения, соответствующего одному из указанных в конструкциях выполняется соответствующая конструкция ТНЕN. А поскольку в операторе предусмотрена также конструкция ЕLSE, то вместо любого значения, не соответствующего одному из указанных в конструкциях ТНЕN, возвращается значение, предусмотренное в конструкции ЕLSE. Если бы конструкция ЕLSE была исключена, то вместо любого такого значения было бы возвращено NULL.-значение.

Поисковый оператор САSЕ

Оператор САSЕ этого типа действует в основном так же, как простой оператор САSЕ, если не считать двух небольших описанных ниже отличий.

1). В нем отсутствует входное выражение (в простом операторе САSЕ входное выражение находится между ключевым словом САSЕ и первым оператором THEN).

2).Вычисление выражения в конструкции THEN должно приводить к получению булева значения.

Даже если значение TRUE может быть получено при вычислении выражений в нескольких конструкциях THEN, учитывается только результат вычисления в первой по порядку конструкции. Например, предпоследняя строка соответствует условию и в первой конструкции TНЕN (последняя цифра меньше З), и в третьей конструкции (последняя цифра отличается от значения РrоductID на 1). не требуется оператор break, поскольку окончание конструкции ТНЕN всегда обозначается началом следующей конструкции.

В условных выражениях могут использоваться различные комбинации и сочетания значений полей. В данном примере использовались значения OrderID, РrоductID, а также оба значения вместе.

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

Организация циклов с помощью оператора WHILE

Оператор WHILE в языке SQL действует во многом так же, как и в других языках, с которыми обычно приходится работать программисту

По сути в этом операторе до начала каждого прохода по циклу проверяется некоторое условие. Если перед очередным проходом по циклу проверка условия приводит к получению значения ТRUE, осуществляется проход по циклу в противном случае выполнение оператора завершается.

Оператор WHILE имеет следующий синтаксис:

Оператор ВREАК позволяет выйти из цикла, не ожидая того, как будет выполнен проход до конца цикла и произойдет повторная проверка условного выражения.

Оператор СОNTINUON в определенном смысле является полностью противоположным оператору ВREАК. Кратко можно описать действие оператора СОNTINUON так, что он обеспечивает переход в начало цикла WНILЕ. Сразу после обнаружения оператора СОNTINUON в цикле, независимо от того, где он находится, происходит переход в начало цикла и повторное вычисление условного выражения (а если значение этого выражения больше не равно ТRUE, осуществляется выход из цикла).

declare @a int, @b float set @a=5

select @b=min(Price) from Detali print @a

print @b

select * from Detali where NazvDet like 'Реле%' set @a=@@RowCount

print 'Используется наименований реле - ' print @a

select * from Detali where NazvDet like 'Реле%' set @a=@@RowCount

if @a=0

print 'Реле не используются' else

begin

print 'Используется наименований реле - ' print @a

end

select * from Detali where NazvDet like 'Катод %' set @a=@@RowCount

if @a=0

print 'Катоды не используются' else

begin

print 'Используется наименований катодов - ' print @a

end

select KodDetalki as "Код детали", Sum_neobh as "Всего неоходимо", Summ_Sklad as "В наличии",

Sum_neobh-Summ_Sklad as "Необходимо дополнительно деталей", Decision= case

when Summ_Sklad<Sum_neobh then 'Необходимо закупать'

when Summ_Sklad is null then 'Необходимо закупать или уточнить данные' else 'Достаточно'

end

from Resultat4 left outer join Resultat2 on KodDetalki=KodDe

select * from Detali where NazvDet like 'Реле%' set @a=@@RowCount

print 'Используется наименований реле - ' print @a

go

waitfor delay '00:00:15'

declare @h int, @a int set @h=0

while @h<3 begin

select * from Detali where NazvDet like 'Конденсатор%' set @a=@@RowCount

print 'Используется наименований конденсаторов - ' print @a

set @h=@h+1 end

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]