КАТЕГОРИИ: Архитектура-(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; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |