SQL_LektsiiRus
.pdf4МОВА ПРОГРАМУВАННЯ У 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