![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Триггеры в диалекте Transact-SQL
В Transact-SQL триггеры создаются инструкцией create trigger (как в Microsoft SQL Server, так и в Sybase Adaptive Server). Специально для триггеров Transact-SQL определяет две виртуальные таблицы, структура которых идентична структуре таблицы, с которой связан триггер. Эти таблицы называются deleted и inserted. Они заполняются строками из модифицируемой таблицы, причем их конкретное содержимое зависит от выполняемой операции: • delete — все строки, удаленные из связанной таблицы, помещаются в таблицу deleted, таблица inserted пуста; • INSERT — все строки, добавленные в связанную таблицу, помещаются в таблицу inserted, таблица DELETED пуста; • update — для каждой строки связанной таблицы, измененной инструкцией update, ее исходная версия помещается в таблицу deleted, а новая версия — в таблицу inserted. К этим двум виртуальным таблицам можно обращаться из тела триггера, и их данные можно использовать в триггере наряду с данными всех остальных таблиц. Для триггеров, связанных с инструкцией UPDATE, в Transact-SQL предусмотрена возможность выяснить, какие именно столбцы таблицы были изменены, и в ответ выполнить соответствующие действия. Для этого в триггерах может использоваться специальная форма инструкции IF — IF update. Триггеры в диалекте Informix В Informix триггеры тоже создаются с помощью инструкции create trigger. Как и в Transact-SQL, эта инструкция определяет имя триггера, таблицу, с которой он связан, и действия, в ответ на которые он выполняется. Informix позволяет указать, когда именно должен вызываться создаваемый триггер • before — триггер вызывается перед выполнением любых изменений, когда ни одна строка связанной таблицы еще не модифицирована; • after — триггер вызывается после выполнения всех изменений, когда все строки связанной таблицы уже модифицированы; • FOR each ROW — триггер вызывается для каждой модифицируемой строки, и ему доступны как старая, так и новая версия этой строки. Для каждого из этих этапов в триггере может быть задана отдельная последовательность действий. В отличие от других СУБД, Informix ограничивает набор действий, которые могут выполняться триггером. Допускаются только. • инструкция insert; • инструкцияDELETE; • инструкция update; • инструкция EXECUTE PROCEDURE. Впрочем, последняя опция обеспечивает все же некоторую гибкость. Вызванная триггером процедура может выполнять практически любые действия, которые могли бы быть произведены самим триггером.
|