КАТЕГОРИИ: Архитектура-(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) |
Триггеры (Triggers)
Бизнес-правила В реальной жизни вопрос целостности базы данных связан с правилами, установленными у пользователя информационной системы. Например, в компании могут быть установлены такие правила: o клиентам не разрешается размещать заказы на сумму, превышающую их лимит кредита; o сведения о выполненных заказах хранятся в течение шести месяцев, а затем удаляются; o нельзя выдавать читателю новых книг, пока он не вернет взятых ранее; o каждый раз, когда продается какой-нибудь товар, для служащего, оформившего продажу, и для отдела, в котором этот служащий работает, на стоимость проданного товара увеличивается значение определенного поля, используемого для вычисления премии; в случае возврата всего или части проданного товара, значение этого поля соответствующим образом должно уменьшиться; o каждый раз, когда приходит новая поставка, количество поставленного товара на складе увеличивается на количество товара в поставке. Такие правила называются бизнес-правилами. В первом стандарте SQL считалось, что эти правила выходят за рамки ответственности СУБД и за их реализацию отвечает прикладная программа, осуществляющая доступ к базе данных. Впервые в 1986 году в СУБД Sybase было введено понятие триггер, что позволило включить реализацию бизнес-правил в базу данных.
С любым событием, вызывающим изменение содержимого таблицы, можно связать сопутствующее действие (триггер), которое СУБД должна выполнять при каждом возникновении события. Триггер – это группа операторов языка SQL, которые автоматически выполняется при вставке, модификации или удалении записи. В СУБД InterBase можно создавать триггеры, работающие при следующих шести условиях:
• до вставки записи (BEFORE INSERT); • после вставки записи (AFTER INSERT); • до удаления записи (BEFORE DELETE); • после удаления записи (AFTER DELETE); • до модификации записи (BEFORE UPDATE); • после модификации записи (AFTER UPDATE). В Firebird 1.5 триггер может срабатывать при возникновении одного из нескольких событий. Триггеры могут вызывать выполнение хранимых процедурPT, выполнять различные проверки и генерировать исключения. Обычно триггеры используются для задания сложных правил контроля целостности базы данных, которые невозможно реализовать с помощью ограничений. Недостатком триггеров является их влияние на производительность операций с базой данных.
Синтаксис оператора создания триггера:
CREATE TRIGGER Имя FOR Таблица [ ACTIVE | INACTIVE ] {BEFORE | AFTER} <операция> [ OR <операция> [ OR <операция>]] [ POSITION Номер] AS [<список переменных>] <блок>; <операция> = {INSERT | UPDATE | DELETE} <список переменных> = DECLARE [ VARIABLE ] Переменная <тип данных>; [ DECLARE [ VARIABLE ] Переменная <тип данных> ;... ] <блок> = BEGIN <составной оператор> [<составной оператор>...] END <составной оператор> = <блок> | Оператор;
Параметры, входящие в этот оператор, пояснены в табл. 2.
Таблица 2 Описание параметров оператора создания триггера
Внутри тела триггера доступны две контекстные переменные NEW и OLD, которые позволяют получить доступ к новым и старым значениям полей записи, при изменении которой был вызван триггер. Пример генератора и триггера:
CREATE GENERATOR EMP_NO_GEN; CREATE TRIGGER SET_EMP_NO FOR EMPLOYEE ACTIVE BEFORE INSERT POSITION 0 AS BEGIN IF (NEW. EMP_NO IS NULL) THEN NEW. EMP_NO = GEN_ID( EMP_NO_GEN, 1); END;
Дата добавления: 2015-04-29; Просмотров: 410; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |