Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 2013.doc
Скачиваний:
68
Добавлен:
07.03.2015
Размер:
3.81 Mб
Скачать
  1. Организация бизнес-логики

При создании корпоративных информационных систем всё большую популярность приобретают решения на базе «тонких клиентов». Под «тонким клиентом» подразумевается персональный компьютер, подключаемый к сети, не выполняющий никаких вычислительных задач кроме отображения данных на экране и передачи вводимой информации на сервер, на котором выполняется основная функциональность системы.

Как и большинство современных СУБД, MSSQLServerпредоставляет возможность частично или полностью перенести бизнес-логику приложения на уровень сервера баз данных. Для решения подобных задач служат механизмы триггеров, хранимых процедур и пользовательских функций.

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

Хранимая процедура – это упорядоченная последовательность операторов SQL, оформленных в виде единого логического модуля.

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

Общий синтаксиссоздания хранимой процедуры:

CREATE PROC[EDURE] <Имя процедуры>

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

[ = <Значение параметра по умолчанию>]

[OUTPUT]] [,...n ]

AS<SQL-выражения, составляющие тело процедуры>

Общий синтаксисвызова хранимой процедуры:

EXEC[UTE] <Имя процедуры>

[[<Имя входного параметра> = ]<Значение входного параметра>] [,…n]

Среда ManagementStudioпредоставляет два способа создания хранимой процедуры. Первый способ – использование рассмотренного выше окна редактора запросов. Второй способ – в «Обозревателе объектов» в ветке нужной базы данных выбрать пункт «Программирование / Хранимые процедуры» (рис. 6.1). При этом будет сгенерирован шаблон новой хранимой процедуры, снабженный подробными комментариями, которые призваны помочь в написании текста процедуры (рис. 6.2).

Рис. 6.1. Создание новой хранимой процедуры

Рис. 6.2. Автоматически генерируемый шаблон хранимой процедуры

Примеры:

1. Хранимая процедура, возвращающая сведения о поставках деталей

Рис. 6.3. Текст хранимой процедуры №1 и результаты ее работы

2. Хранимая процедура, возвращающая сведения о поставках деталей за определенный интервал времени

Рис. 6.4. Текст хранимой процедуры №2 и результаты ее работы

3. Процедура, добавляющая сведения в таблицу деталей

Рис. 6.5. Текст хранимой процедуры №3 и результаты ее работы

4. Процедура, возвращающая название материала, из которого изготовлено больше всего деталей

Рис. 6.6. Текст хранимой процедуры №4 и результаты ее работы

5. Процедура, реализующая функцию каскадного удаления на связь между таблицами материалов и деталей

Рис. 6.7. Текст хранимой процедуры №5 и результаты ее работы

Задание:создайте 2 хранимые процедуры для своей базы, в отчет поместите их описание, код создания, код вызова, результат.

    1. Триггеры

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

Таблица 6.2. Сравнение триггеров и хранимых процедур

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

Триггеры

Являются самостоятельным объектом базы данных

Привязываются к таблице или виду

Явно вызываются на выполнение командой EXECUTE

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

Могут иметь входные и / или выходные параметры, коды возврата

Не имеют входных / выходных параметров и кодов возврата

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

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

Возможность закрепления триггеров за конкретными операторами определяется тем, что в языке SQLпредусмотрены три типа запросов, предназначенных для изменения данных –INSERT,UPDATEиDELETE. В связи с этим выделяют шесть видов триггеров (табл. 6.3).

Таблица 6.3. Виды триггеров

Объект

Действие

Триггер

Таблица / вид

Вставка строк INSERT

Вместо вставки строк INSTEAD OF

После вставки строк FOR (AFTER)

Модификация строк UPDATE

Вместо модификации строк INSTEAD OF

После модификации строк FOR (AFTER)

Удаление строк DELETE

Вместо удаления строк INSTEAD OF

После удаления строк FOR (AFTER)

Примечание: триггеры FOR и AFTER являются синонимами.

Независимо от используемого типа триггера для реализации действий, предусмотренных этим триггером в СУБД SQLServer, используются две виртуальные таблицы.

В одной из них хранятся копии всех вставляемых строк (поэтому данная таблица именуется INSERTED), а во второй хранятся копии всех удаляемых строк (эта таблица именуетсяDELETED) (табл. 6.4).

Таблица 6.4. Содержимое таблиц INSERTED и DELETED

Вид триггера

Таблицы INSERTED и DELETED

INSTEAD OF INSERT

INSERTED содержит вставляемые в таблицу записи. DELETED пуста.

FOR INSERT

INSERTED содержит вставленные в таблицу записи. DELETED пуста.

INSTEAD OF UPDATE

INSERTED содержит новые значения модифицируемых записей. DELETED содержит старые значения модифицируемых записей.

FOR UPDATE

INSERTED содержит новые значения модифицированных записей. DELETED содержит старые значения модифицированных записей.

INSTEAD OF DELETE

INSERTED пуста. DELETED содержит удаляемые записи.

FOR DELETE

INSERTED пуста. DELETED содержит удаленные записи.

На рис. 6.8 приведена схема запуска триггеров FOR(AFTER) иINSTEADOF.

Рис. 6.8. Схема запуска триггеров FOR (AFTER) и INSTEAD OF

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

Создавать новые триггеры можно либо в редакторе запросов среды ManagementStudio, либо воспользовавшись специальным шаблоном (рис. 6.10), который открывается при выборе в «Обозревателе объектов» пункта «Создать триггер» у таблицы, к которой будет привязываться создаваемый триггер (рис. 6.9).

Рис. 6.9. Создание нового триггера

Рис. 6.10. Шаблон создания нового триггера

Общий синтаксиссоздания триггера:

CREATETRIGGER<Имя триггера>

ON<Имя таблицы или вида>

{FOR|AFTER|INSTEAD OF} {[INSERT] [,] [UPDATE] [,] [DELETE]}

AS<SQL-выражения, составляющие тело триггера>

Примеры:

1. Триггер на поддержание актуального количества товаров на складе при добавлении поставок деталей

Рис. 6.11. Текст триггера №1

2. Триггер на поддержание актуального количества товаров на складе при удалении поставок

Рис. 6.12. Текст триггера №2

3. Триггер на поддержание актуального количества товаров на складе при отпуске деталей в цеха

Рис. 6.13. Текст триггера №3

4. Проверка допустимости значения даты поставки при осуществлении новой поставки деталей

Рис. 6.14. Текст триггера №4

5. Проверка допустимости значения даты поставки при редактировании существующей поставки деталей

Рис. 6.15. Текст триггера №5

Задание:создайте 2 триггера для своей базы, в отчет поместите их описание и код создания.