русс | укр

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

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

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

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


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

Часть 3. Программирование триггера


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


При выполнении команд добавления, изменения и удаления записей сервер создает две специальные таблицы: inserted и deleted.

В них со­держатся списки строк, которые будут вставлены или будут удалены по заверше­нии транзакции.

Структура таблиц inserted и deleted идентична структуре таблиц, для которой определяется триггер. Для каждого тригге­ра создается свой комплект таблиц inserted и deleted, поэтому ника­кой другой триггер не сможет получить к ним доступ.

В зависимости от ти­па операции, вызвавшей выполнение триггера, содержимое таблиц inserted и deleted может быть разным:

• если дается команда INSERT - в таблицеinserted содержатся все строки, ко­торые пользователь пытается вставить в таблицу; при этом в таблице delet­ed не будет ни одной строки; после завершения триггера все строки из таблицы inserted переместятся в исходную таблицу;

• если дается команда DELETE - в таблице deleted будут содержаться все стро­ки, которые пользователь попытается удалить; триггер может прове­рить каждую строку и определить, разрешено ли ее удаление; при этом в таб­лице inserted не окажется ни одной строки;

• если дается команда UPDATE- при ее выполнении в таблице deleted находят­ся старые значения строк, которые будут удалены при успешном за­вершении триггера. Новые значения строк содержатся в таблице inserted. Эти строки добавятся в исходную таблицу после успеш­ного выполнения триггера.

Для получения информации о количестве строк, которое будет изме­нено при успешном завершении триггера, можно использовать функцию @@ROWCOUNT; она возвращаетколичество строк, обработанных последней командой. Следует подчеркнуть, что триггер запускается не при попытке

изменить конкретную строку, а в момент выполнения команды измене­ния. Одна такая команда воздействует на множество строк, поэтому триг­гер должен обрабатывать все эти строки.



Если триггер обнаружил, что из 100 вставляемых, изменяемых или удаляемых строк хотя бы одна строка не удовлетворяет тем или иным условиям, то никакая строка не будет вставлена, изменена или удалена. Такое пове­дение обусловлено требованиями транзакции - должны быть выполнены либо все модификации, либо ни одной.

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

Для получения списка столбцов, вызвавших выполнение триггера и измененных при выполнении ко­манд INSERT или UPDATE, можно ис­пользовать функцию COLUMNS_UPDATED(). Она возвращает двоичное число, каждый бит которого, начиная с младшего, соответствует одному столбцу таблицы (в порядке следования столбцов при создании таблицы). Если бит установлен в значение «1», то соответствующий столбец был из­менен.

Кроме того, факт изменения столбца определяет и функция

UPDATE (имя_столбца).

 

Для удаления триггера используется команда

DROP TRIGGER {имя_триггера} [,...n]

 

 

Приведем примеры использования триггеров.

Пример 1. Использование триггера для реализации ограничений на значение.

При добавлении записи в таблицу Продажи необходимо учесть следующее:

· значения поля Товар должны быть только такими, какие имеются в таблице Товары;

· значения поля Клиент должны быть только такими, какие имеются в таблице Клиенты;

· количество продаваемого товара должно быть не больше, чем его осталось после всех поставок и предыдущих продаж;

· Дата продажи не должна превышать сегодняшнюю дату.

 

Команда вставки записи в таблицу Продажи может быть, например, такой:

 

INSERT INTOПродажи VALUES ('2013-05-10', 3 , 1, 20, 299)

 

В примере ID_товара=3, ID_клиента = 1, Количество=20, Цена_продажи =299.

 

Создаваемый триггер должен отреагировать на ее выполнение следу­ющим образом: необходимо отменить команду, если в таблице Продажи

1. значение, вводимое в поле Товар, будет отсутствовать в таблице Товары;

2. значение, вводимое в поле Клиент, будет отсутствовать в таблице Клиенты;

3. ве­личина остатка товара оказалась меньше продаваемого количества товара с введенным кодом.

 

Представленный триггер настроен на об­работку только одной добавляемой записи.

CREATE TRIGGER T1



<== предыдущая лекция | следующая лекция ==>
Типы триггеров | Лекция 7


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


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

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

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


 


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

 
 

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

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