Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Хранимые процедуры. ХП — это модуль, состоящий из SQL операторов и находящийся в БД на SQL-сервере, вызываемый клиентскими приложениями




ХП — это модуль, состоящий из SQL операторов и находящийся в БД на SQL-сервере, вызываемый клиентскими приложениями. ХП может:

(i) получать и возвращать параметры;

(ii) вызывать другие процедуры;

(iii) возвращать код ошибки (с помощью return);

(iv) возвращать наборы данных, сформированные запросами в теле ХП.

ХП создается оператором, имеющим следующий синтаксис:

create { proc | procedure } <имя процедуры> [; <номер> ]

[ @<имя параметра 1> <тип данных 1>

[ = <значение по умолчанию 1> ] [ { out | output } ] [ readonly ]

[, … ]

[ with recompile ]

as

<оператор>

 

<имя процедуры> — идентификатор уникальный в рамках БД;

<номер> — позволяет объединять процедуры в группы, например для возможности удаления всей группы оператором drop procedure, в будущих версиях MS SQL планируется отказаться от этой возможности;

@<имя параметра 1> — идентификатор локального параметра, областью действия которого является тело ХП;

<тип данных 1> — в ХП используется тот же набор типов данных, что и для столбцов таблиц;

<значение по умолчанию 1> — используется, если значение параметра не было указано при вызове ХП;

out или output говорит о том, что значение параметра является возвращаемым;

readonly — значение параметра не может быть изменено в теле ХП;

recompile — требует перекомпиляции процедуры при каждом ее вызове (например, в целях оптимизации планов выполнения запросов в теле ХП).

ХП вызывается оператором, имеющим следующий синтаксис:

[ { exec | execute } [ @<имя переменной> = ] <имя процедуры> [; <номер> ]

[ @<имя параметра 1> ] = { <значение параметра 1> |

@<имя переменной 1>] [ output ] }

[, … ]

[ with recompile ]

 

@<имя переменной> — имя переменной, которой будут присвоен код возврата (ошибки), возвращаемый процедурой;

<значение параметра 1> — выражение, задающее значение для параметра процедуры;

@<имя переменной 1> — значение параметра задается переменной.

Примеры ХП:

(i) выборка данных:

create procedure Гр_4001_5001

as

select * from Группа, Студент where Группа = Id and Номер = '4001'

select * from Группа, Студент where Группа = Id and Номер = '5001'

go

 

Гр_4001_5001

go

 

(ii) процедура с параметром:

create procedure Гр_N @n char(7) = '4001'

as

select * from Группа, Студент where Группа = Id and Номер = @n

go

 

Гр_N '5001'

go

 

Гр_N

go

 

во втором вызове будет использовано значение по умолчанию;

(iii) процедура с возвращаемым параметром:

create procedure Кол_во_Студ_в_Гр_N @n char(7) = '4001', @Кол_во int = 0 out

as

select @Кол_во = count(*)

from Группа, Студент

where Группа = Id and Номер = @n

go

 

declare @x int

exec Кол_во_Студ_в_Гр_N '5001', @x out

select @x

go

 

Системная ХП (СХП) sp_helptext выводит текст ХП:

sp_helptext 'Кол_во_Студ_в_Гр_N'

go

 

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

Создадим и заполним таблицу Подразделение:

create table Подразделение (Id int, Наименование char(20), Подчинено int);

go

 

insert into Подразделение values (1, 'Гуап', null);

insert into Подразделение values (2, 'Факультет 4', 1);

insert into Подразделение values (3, 'Кафедра 43', 2);

insert into Подразделение values (4, 'Лаборатория 23-10', 3);

go

 

Тогда следующая ХП позволит вывести перечень подразделений, входящей в состав заданного:

create procedure Орг_стр_ра @Подразд char(20)

as begin

declare @n int

select @n = 0

select @n = Id from Подразделение where Наименование = @Подразд

create table #Иерарх (Наимен char(20))

insert into #Иерарх

select Наименование from Подразделение where Подчинено = @n

select @n = 0

while @n <> (select count(*) from #Иерарх)

begin

select @n = count(*) from #Иерарх

insert into #Иерарх

select П1.Наименование

from Подразделение П1, Подразделение П2

where П1.Подчинено = П2.Id and

П2.Наименование in

(select Наимен from #Иерарх) and

П1.Наименование not in

(select Наимен from #Иерарх)

end

select * from #Иерарх

end

go

 

exec Орг_стр_ра 'Факультет 4'

go

 

Помимо ХП SQL поддерживает создание функций пользователя (create function), которые наряду со стандартными могут использоваться при формировании условий выполнения запросов.




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


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


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



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




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