КАТЕГОРИИ: Архитектура-(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) |
Обеспечение каскадных воздействий с помощью триггеров
Значения OLD и NEW Создание триггеров Триггер создается оператором: CREATE TRIGGER ИмяТриггера FOR ИмяТаблицы [ ACTIVE | INACTIVE ] { BEFORE | AFTER } { DELETE | INSERT | UPDATE } [ POSITION номер ] AS [<объявление локальных переменных>] BEGIN <оператор> END Для определения тела триггера используется процедурный язык, рассмотренный для хранимых процедур. В него добавляется возможность доступа к старому и новому значениям столбцов изменяемой записи OLD и NEW. Заголовок триггера имеет следующие управляющие элементы: ACTIVE | INACTIVE – указывает, активен триггер или нет. Можно определить триггер «про запас», установив для него INACTIVE. По умолчанию действует ACTIVE. BEFORE | AFTER – указывает, будет выполнятьсятриггер до (BEFORE) или после (AFTER) запоминания изменений в БД. DELETE | INSERT | UPDATE – указывает операцию над таблицей БД, при выполнении которой срабатывает триггер. POSITION номер – указывает каким по счету будет выполняться триггер в случае наличия группы триггеров, обладающих одинаковыми характеристиками. Триггеры с меньшими номерами выполняются раньше Пример. Обеспечение каскадных воздействий): CREATE TRIGGER AD_TOVARY FOR TOVARY ACTIVE AFTER DELETE POSITION 1 AS BEGIN DELETE FROM RASHOD WHERE RASHOD.TOVAR = TOVARY.TOVAR; END Значение OLD.имя_столбца позволяет обратиться к состоянию столбца, имевшему место до внесения возможных изменений, а значение NEW.имя_столбца – к состоянию столбца, имевшему место после внесения возможных изменений. Пример: CREATE TRIGGER BU_TOVARY FOR TOVARY ACTIVE BEFORE UPDATE AS BEGIN IF (OLD.TOVAR <> NEW.TOVAR) THEN UPDATE RASHOD SET TOVAR = NEW.TOVAR WHERE TOVAR = OLD.TOVAR; END 3.6.4. Изменение существующего триггера: ALTER TRIGGER ИмяТриггера FOR ИмяТаблицы [ ACTIVE | INACTIVE ] { BEFORE | AFTER } { DELETE | INSERT | UPDATE } [ POSITION номер ] AS <тело триггера> 3.6.5. Удаление триггера: DROP TRIGGER ИмяТриггера Если между двумя или более таблицами БД установлены отношения ссылочной целостности («один ко многим», «один к одному»), при изменении столбца связи в родительской таблице должно быть изменено значение столбца связи у записей соответствующих дочерних таблиц. Такое воздействие носит название каскадного обновления. Триггер, реализующий каскадное обновление в дочерней таблице, будет в числе прочих содержать оператор: IF (OLD.ПолеСвязиРодителя <> NEW. ПолеСвязиРодителя) THEN UPDATE Дочерняя.Таблица SET ПолеСвязиДочернейТаблицы = NEW.ПолесвязиРодителя WHERE ПолеСвязиДочернейТаблицы = OLD.ПолеСвязиРодителя;
Если в родительской таблице удалена запись, должны быть удалены все связанные с ней записи в дочерней таблице. Такое воздействие на дочернюю таблицу носит название каскадного удаления. Триггер, реализующий каскадное удаление в дочерней таблицы, будет содержать оператор: DELETE FROM ДочерняяТаблица WHERE ПолеСвязиДочернейТаблицы = ПолеСвязиРодителя;
Примеры. CREATE TRIGGER BU_TOVARY FOR TOVARY ACTIVE BEFORE UPDATE AS BEGIN IF (OLD.TOVAR <> NEW.TOVAR) THEN UPDATE RASHOD SET TOVAR = NEW.TOVAR WHERE TOVAR = OLD.TOVAR; END --------------------------------------- CREATE TRIGGER AD_TOVARY FOR TOVARY ACTIVE AFTER DELETE AS BEGIN DELETE FROM RASHOD WHERE RASHOD.TOVAR = TOVARY.TOVAR; END
Дата добавления: 2014-12-23; Просмотров: 772; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |