Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Назначение и примеры




CASE—

Ключевые слова

 

 

оператор выбора

 

 

USE — оператор

переключения базы


Часто эта конструкция используется для выполнения одного оператора UPDATE.

Пример 14.8. Модификация колонки может происходить по контролю его

минимального значения: пока наименьшая оценка менее шести баллов, будем их

увеличивать на одну единицу.

while (select min(Оценка)from Успеваемость)<=5

update Успеваемость set Оценка=Оценка+1

where Оценка<5

go

 

Ключевое слово CASE используется для оценки списка условий и возврата одного из

нескольких возможных результатов. Возвращаемый результат зависит от того, какое

условие совпадает с другим указанным условием или является истинным. Наиболее

распространенным применением CASE является замена кодового или сокращенного

значения на более понятное значение и упорядочивание значений.

Простой синтаксис:

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

WHEN выражение_для_when THEN результирующее_выражение

[WHEN выражение_для_when THEN результирующее_выражение...n]

[ELSE выражение_для_else]

END

Поисковый формат:

CASE

WHEN Булево_выражение THEN результирующее_выражение

[WHEN Булево_выражение THEN результирующее_выражение...n]

[ELSE результирующее_выражение_для_else]

END

Пример 14.9. Пропишем оценки текстом: ―два‖, ―три‖, и т.д.

select 'оценка'= case Оценка

when 2 then 'два'

when 3 then 'три'

when 4 then 'четыре'

else 'пять'

end

from Успеваемость

order by Оценка

go

Пример 14.10. Приведем оценки к шкале: ―неуд.‖, ―уд.‖, ―хор.‖ и ―отл.‖

select 'диапазон оценок'=

case

when Оценка between 0 and 3 then 'неуд.'

when Оценка between 4 and 6 then 'уд.'

when Оценка between 7 and 8 then 'хор.'

else 'отл.'

end

from Успеваемость

order by Оценка desc

go

 

Используется для указания, к какой базе данных будут применяться последующие

команды.


данных;

GО — оператор

конца пакета

команд.

GОТО — оператор

перехода;

 

129


 

Встроенные функции (математические, строковые, даты и времени, преобразования

и др.) обеспечивают выполнение наиболее распространенных алгоритмов.

Пользовательские функции (function) являются самостоятельными объектами базы

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

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

Функция должна в обязательном порядке явно вернуть какое-то значение, может

использовать или не использовать входные параметры, в ней можно определять значения по

умолчанию. В теле функции (кроме функций Inline) разрешается создавать циклы,

использовать команды ветвления, работать с транзакциями, объявлять переменные и т. д.

Создание определяемых пользователем функций выполняется с помощью команды

CREATE FUNCTION. Однако для создания функций разных типов существует разный

синтаксис этой команды.

ВНИМАНИЕ! В приведенных примерах комментарием «--вызов» отделены сами

функции от команд демонстрации их работы.

Функции создаются в объекте Programmability ® Functions ® New ê. В контекстном

меню в SQL Server имеется несколько типов определяемых пользователем функций:

Scalar. Функции этого типа возвращают обычное скалярное значение и являются

наиболее привычными. Функция Scalar может содержать множество команд, объединяемых

конструкцией BEGIN…END в одно целое. На рисунке 14.21 показано окно с текстом

функции примера 14.11. Каждая новая пользовательская функция запускается на

выполнение, в окне сообщений должно быть зафиксировано ее успешное выполнение. Далее

необходимо обновить объект Functions базы данных, увидеть в списке вновь созданную

функцию и создать новый запрос, в котором вызвать ее выполнение.

Пример 14.11. Функция "количество студентов по году рождения"

create Function kol_year(@god int = 1987)

returns smallint

AS

begin

declare @y int

set @y=(select count(Фамилия) from Студенты

where year([Дата рождения])=@god)

return @y

end

--вызов

select r=dbo.kol_year(1983)

 

Рис. 14.21. Разработка пользовательских функций в базе данных в SQL Server 2005

 

130

 


 

 

Inline. Функции этого типа всегда возвращают значения типа данных table,

представляющие собой сложный набор данных. Кроме того, функция Inline может состоять

всего из одной команды SELECT.

Замечание. Функции, возвращающие значения типа данных table (Inline и Multi-

Scalar), могут вызываться непосредственно в разделе FROM при работе с запросами

SELECT, INSERT, DELETE и UPDATE.

Пример 14.12. Функция "список студентов по курсу (вывод курса прописью)"

create Function kurs(@VvodKurs varchar(3))

returns table

AS

return (SELECT Фамилия, 'Курс'=

case Курс

when 'I' then 'первый'

when 'II' then 'второй'

else 'старший'

end

FROM dbo.Студенты

WHERE Курс=@VvodKurs)

--вызов

select * from dbo.kurs('I')

 

Multi-Scalar. Это табличная функция, которая возвращает значение типа данных

table, но в теле функции находится множество команд SQL. Требуется задать структуру

возвращаемого значения (как у CREATE TABLE) и формировать возвращаемые данные

командой INSERT.

Пример 14.13. "отчисление" для вывода списка отчисленных студентов

Create FUNCTION otchislenie ()

RETURNS @info table(f char(20))

AS

BEGIN

declare @vv table(fio char(20),vivod char(10))

insert @vv select Фамилия, 'отчислить' from Успеваемость where (Оценка<4)

insert @info select fio from @vv

return

END

--вызов

select * from dbo.otchislenie()

 

 

Хранимые процедуры (stored procedures) - являются механизмом, с помощью

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

процессами. Хранимые процедуры могут возвращать значения, в них можно передавать

значения и получать результаты, не обязательно имеющие отношение к рабочей таблице.

Хранимые процедуры используют для добавления записей в таблицу, создания таблицы и

вставки данных с помощью оператора SELECT (insert into), удаления и обновления данных.

При разработке хранимых процедур можно использовать:

встроенные функции:

- функции просмотра конфигурации;

- функции для работы с курсорами;

 функции работы с датой и временем;

- математические функции;

- функции метаданных;

- функции подсистемы безопасности;

- строковые функции;

- системные функции;

 

 

131

1.


 

- статистические функции;

- функции для работы с типами данных image, text и ntext.

2. оператор SELECT:

- с вычисляемыми полями;

- с операторами сравнения;

- с фразой BETWEEN;

- с фразой IN;

- с фразой LIKE;

- с сортировкой по алфавиту;

- с фразой TOP;

- с использованием агрегатных функций;

- с фразой GROUP BY;

- ñ ôðàçîé HAVING;

- ñ èñïîëüçîâàíèåì ôóíêöèé äëÿ ðàáîòû ñî ñòðîêàìè;

3. управляющие конструкции и циклы:

- IF... ELSE (IF EXISTS...);

- BEGIN... END;

- WHILE;

- CASE;

4. локальные и глобальные переменные;

5. возвращать код завершения (RETURN).

Через хранимые процедуры осуществляются правила ограничения целостности

данных и алгоритмы обработки данных. Располагаясь на сервере, по сети передается только

вызов процедуры и, возможно, необходимые ей параметры. Это может значительно снизить

нагрузку на сеть, процедура выполняется под присмотром сервера, который сам заботится о

допустимости и устойчивости к ошибкам.

 

Технологии разработки хранимых процедур подобны пользовательским функциям,

только выбирается объект Programmability ® Stored Procedures ® New ê.

 

Пример 14.14. процедура с входным и выходным параметром

(подсчитываем и выводим количество студентов определенного года рождения).

CREATE PROCEDURE СколькоВГод @VvodYear int, @Rezult int output

AS

SELECT @Rezult=Count(Фамилия)

FROM dbo.Студенты

group by YEAR([Дата рождения])

having YEAR([Дата рождения])=@VvodYear

GO

--вызов

declare @Rez int

exec СколькоВГод 1987, @Rez output

select Всего=@Rez

 

Пример 14.15. процедура с параметром по умолчанию (получаем список

студентов определенного года рождения с выводом фамилии и даты рождения).

CREATE PROCEDURE Год @VvodYear int=2011

AS

SELECT Фамилия, [Дата рождения], Год=YEAR([Дата рождения])

FROM dbo.Студенты

WHERE YEAR([Дата рождения])=@VvodYear

GO

--вызов

exec Год @vvodyear=1983

 

 


 

Пример 14.16. процедура с параметром по умолчанию («переводим»

студентов одного пола в новую группу (по умолчанию, женский пол переведем в

группу 108999)).

CREATE PROC UpDefault

@tip varchar(3)='жен', @gr varchar(6)= '108999'

AS

UPDATE Студенты SET Группа=@gr WHERE Пол=@tip

--вызов


EXEC UpDefault


EXEC UpDefault 'муж', '107666'


 

Пример 14.17. процедура для возврата значения.

На рисунке 14.22 продемонстрирован запрос с вызовом хранимой процедурой

dbo.checka, в котором объявляется переменная @ret и в нее помещается возвращаемое

хранимой процедурой значение (1 или 99), производится ее анализ (конструкция if) и

результат выводится в окно сообщений.

 

CREATE PROCEDURE checka @pr nvarchar(6)

AS

IF (SELECT Count(Фамилия) FROM Студенты

WHERE Группа=@pr)<30

RETURN 1

ELSE

RETURN 99

--вызов

Declare @ret int

EXEC @ret=checka '108811'

if(@ret=1) Print 'В группе еще менее 30 человек'

 

 

Рис. 14.22. Запрос для вызова хранимой процедуры в базе данных в SQL Server 2005

 

 




Поделиться с друзьями:


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


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.077 сек.