русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Хранимая процедура


Дата добавления: 2013-12-23; просмотров: 1609; Нарушение авторских прав


Лекция 7. Хранимые процедуры и триггеры

Оператор DROP

Оператор DROP навсегда удаляет объекты базы данных (таблицы, представления, индексы и т.д.)

DROP INDEX имя индекса| PROCEDURE имя процедуры|TABLE имя таблицы|VIEW имя представления

Назначение и использование хранимых процедур. Средства поддержания динамической целостности.

Хранимые процедуры и триггеры.

Хранимая процедура – это набор операторов T-SQL, который компилируется системой SQL Server в единый "план исполнения". Этот план сохраняется в кэш-области памяти для процедур при первом выполнении хранимой процедуры, что позволяет использовать этот план повторно; системе SQL Server не требуется снова компилировать эту процедуру при каждом ее запуске. Хранимые процедуры T-SQL аналогичны процедурам в других языках программирования в том смысле, что они допускают входные параметры и возвращают выходные значения в виде параметров или сообщения о состоянии (успешное или неуспешное завершение). Все операторы процедуры обрабатываются при вызове процедуры. Хранимые процедуры используются для группирования операторов T-SQL и любых логических конструкций, необходимых для выполнения задачи. Поскольку хранимые процедуры сохраняются в виде процедурных блоков, они могут использоваться различными пользователями для согласованного повторяемого выполнения одинаковых задач и даже в различных приложениях. Хранимые процедуры также позволяют поддерживать единый подход к управлению задачей, что помогает обеспечивать согласованное и корректное внедрение любых деловых правил.

Использование хранимых процедур может повысить производительность и в других отношениях. Например, использование хранимых процедур для проверки условий сервера может повысить производительность за счет снижения количества данных, которые должны передаваться между клиентом и сервером, и снижения объема обработки, выполняемой на клиентской машине. Для проверки какого-либо условия из хранимой процедуры можно включить в хранимую процедуру условные операторы (например, конструкции IF и WHILE). Логика этой проверки будет обрабатываться на сервере с помощью хранимой процедуры, поэтому вам не потребуется программировать эту логику в самом приложении а серверу не нужно будет возвращать промежуточные результаты клиенту для проверки данного условия. Вы можете также вызывать хранимые процедуры из сценариев, пакетных заданий и интерактивных командных строк с помощью операторов T-SQL, показанных в примерах далее.



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

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

 

Оператор CREATE PROCEDURE используется для создания хранимых процедур.

CREATE PROCEDURE имя_процедуры [параметры) [опции] AS SQL statement;

Пример

CREATE PROCEDURE LateShipments

AS

SELECT RequiredDate,

ShippedDate,

Shippers.CompanyName

FROM Orders, Shippers

WHERE ShippedDate > RequiredDate AND

Orders.ShipVia = Shippers.ShipperID

GO

 

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

Чтобы задать входные параметры в хранимой процедуре, укажите список этих параметров с символом @ перед именем каждого параметра, т.е. @имя_параметра, например, @shipperName . Допускается задание до 1024 параметров в хранимой процедуре. Для возврата значения параметра хранимой процедуры в вызывающую программу используйте ключевое слово OUTPUT после имени этого параметра. Чтобы сохранить значение в переменной, которую можно использовать в вызывающей программе, используйте при вызове хранимой процедуры ключевое слово OUTPUT.

Для создания локальных переменных используется ключевое слово DECLARE. При создании локальной переменной вы должны задать для нее имя и тип данных, а также поставить перед именем переменной символ @. При объявлении переменной ей первоначально присваивается значение NULL.

Пример

create procedure zapr8 as

declare @yz char (25) /* переменная для названия учебного заведения */

declare @ko char (16) /*переменная для названия категории обучения */

declare @it1 int /* переменная для итога по полю категория обучения */

declare @it2 int /* переменная для итога по полю учебное заведение */

declare @itall int /* переменная для итога по всему запросу */

declare @yz1 char (25) /*переменная для названия учебного заведения*/

/* объявление курсора для двумерного статистического запроса */

declare y cursor for

select vuz.uch_zavedenie, kat_obucheniya, count (*)

from poss join vuz on vuz_k=vuz.cod

join kat_obuch on kat_obuch_k=kat_obuch.cod

where gp='90'

group by vuz.uch_zavedenie, kat_obuch.kat_obucheniya

select @it2=0 /*начальное значение итога по полю уч. заведение=0*/

select @itall=0 /* начальное значение итога по запросу = 0 */

open y /* открытие курсора */

fetch y into @yz, @ko, @it1

/* считывание первого итога по полю категория обучения */

if (@@fetch_status=-2) begin

print 'Ошибка при выполнении первого FETCH'

close y /* закрытие курсора и останов процедуры в случае ошибки */

return

end

if (@@fetch_status=-1) begin

print 'Данные не найдены'

close y /*закрытие курсора и останов процедуры в случае отсутствия данных по запросу */

return

end

select @yz1=@yz /*запоминание названия учебного заведения в @yz1*/

print @ko+' -'+str(@it1) /*печать названия категории обучения и итога*/

select @it2=@it2+@it1 /* подсчет итога по полю учебное заведение */

select @itall=@itall+@it1 /* подсчет общего итога по запросу */

/* цикл обработки запроса */

while (@@fetch_status=0)

begin

fetch y into @yz, @ko, @it1 /* считывание очередного итога по полю категория обучения */

if (@yz1 !=@yz) begin /* если название учебного заведения поменялось, то печать */

print 'учебное заведение ' + @yz1 + ' - ' +str(@it2) /* старого названия учебного заведения и итога */

select @yz1=@yz/*присвоение нового названия учебного заведения */

select @it2=0 /* новый итог = 0 */

end

if (@@fetch_status=-1) break /* при окончании данных немедленный выход из цикла */

print @ko + ' - ' +str(@it1) /* печать очередных названия категории обучения и итога */

select @it2=@it2+@it1 /* подсчет итога по полю учебное заведение */

select @itall=@itall+@it1 /* подсчет общего итога по запросу */

end

close y /* закрытие курсора по окончании цикла */

if (@@fetch_status=-2) begin

print 'Ошибка при выполнении FETCH'

return /* останов процедуры в случае ошибки */

end

print 'учебное заведение ' + @yz + ' - ' +str(@it2) /* печать последнего итога по учебному заведению */

print '----------------------------------'

print 'всего по запросу-'+str(@itall) /*печать общего итога по запросу */

deallocate y /* освобождение курсора */

return [F5]

 



<== предыдущая лекция | следующая лекция ==>
Оператор CREATE INDEX | Триггеры


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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