Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Вложенные хранимые процедуры




Вложенностью называют ситуацию, когда хранимая процедура вызывает другую процедуру или выполняет управляемый код, ссылаясь на подпрограмму, тип или статистическую функцию среды Common Language Runtime (CLR) Integration. Любая ссылка на управляемый код внутри хранимой процедуры Transact-SQL считается одним уровнем вложенности.

Вложенность хранимых процедур и ссылок на управляемый код ограничена 32 уровнями. Уровень вложенности увеличивается на единицу, когда вызванная хранимая процедура или управляемый код начинает выполняться, и уменьшается на единицу, когда заканчивает. Если уровень вложенности превышает максимальное значение, вся цепочка вызовов заканчивается ошибкой. Текущий уровень вложенности хранимых процедур можно получить при помощи функции @@NESTLEVEL.

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

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

1. Сначала разрабатывается процедура для определения фирмы, где работает сотрудник (вложенная процедура).

CREATE PROC my_proc7 @n VARCHAR(20), @f VARCHAR(20) OUTPUT

AS

SELECT @f=Фирма

FROM Клиент

WHERE Фамилия=@n

 

2. Затем создается процедура (вызывающая процедура), подсчитывающая общее количество товара, который закуплен интересующей нас фирмой.

CREATE PROC my_proc8 @fam VARCHAR(20), @kol INT OUTPUT

AS

DECLARE @firm VARCHAR(20)

EXEC my_proc7 @fam, @firm OUTPUT-- вызов вложенной процедуры.

SELECT @kol= Sum(Сделка.Количество)

FROM Клиент INNER JOIN Сделка

ON Клиент.КодКлиента=Сделка.КодКлиента

GROUP BY Клиент.Фирма

HAVING Клиент.Фирма= @firm

 

3. Вызов процедуры осуществляется с помощью команды:

DECLARE @k INT

EXEC my_proc8 ‘Иванов’,@k OUTPUT

SELECT @k

Триггеры

Microsoft SQL Server 2005 предоставляет два механизма реализации бизнес-правил и целостности данных: ограничения и триггеры.

Триггером называют хранимую процедуру особого типа, которая автоматически выполняется при возникновении языкового события. SQL Server поддерживает два основных типа триггеров: DML-триггеры и DDL-триггеры.

DDL-триггеры впервые появились в SQL Server 2005. Они выполняются при возникновении событий языка определения данных (DDL) на сервере или в базе данных.

DML-триггеры выполняются при возникновении событий языка обработки данных (DML) в базе данных. DML-триггеры могут обращаться к другим таблицам и содержать сложные инструкции Transact-SQL.

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

 

Триггеры DDL и триггеры DML используются для решения разных задач.

Триггеры DDL создаются для инструкций CREATE, ALTER, DROP и других инструкций DDL. Используют их для выполнения административных задач и гарантии соблюдения бизнес-правил, влияющих на базы данных.

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...