Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Указание момента инициирования триггера. Предоставляется возможность указать, что определяемый триггер выполняется вместо
Предоставляется возможность указать, что определяемый триггер выполняется вместо предложения-события. Для этого используется фраза INSTEAD OF и сами триггеры называются замещающими (или инстидоф-триггерами). Такой триггер может быть определен только для представлений, которые не могут быть непосредственно модифицированы с помощью предложений ЯМД (INSERT, DELETE, UPDATE). Для триггеров этого типа предложение-событие никогда не выполняется, а вместо него отрабатывается тело триггера. Триггеры этого типа производят операции обновления, вставки и удаления непосредственно в таблицах, на которых определены представления. Пользователи могут писать обычные предложения INSERT, DELETE или UPDATE по отношению к таким представлениям, а вместо них будут отработаны замещающие триггеры невидимым для пользователя образом. И при этом они производят корректные операции манипулирования над базовыми таблицами. По умолчанию замещающие триггеры активизируются для каждой строки. Как мы уже знаем, существуют серьезные ограничения на модификацию представлений. Все необновляемые представления, тем не менее, могут быть обновлены с помощью замещающих триггеров. Приведем пример такого использования замещающего триггера для замены строк. Допустим, имеется следующее представление, которое содержит все номера корпусов, содержащиеся в трех таблицах учебной базы данных (FACULTY, DEPARTMENT, ROOM).
CREATE VIEW ALL_BUILDINGS (Building) AS SELECT Building FROM FACULTY UNION SELECT Building FROM DEPARTMENT UNION SELECT Building FROM ROOM;
Пусть номер корпуса 6 поменялся — на 6/А. Теперь, если мы попробуем поменять этот номер сразу во всех трех таблицах через наше представление ALLJ3UIL- DINGS, получим отказ:
UPDATE ALL_BUILDINGS SET Building = ’б/А’ WHERE Building = ’б’; UPDATE ALL_BUILDINGS SET Building = ’б/А1 WHERE Building = ’6‘ * ошибка в строке 1: ORA-01732: обработка данных для данного предст. пользователя не разрешена
Дело в том, что представление ALL_BU I LD I NGS является необновляемым в связи с тем, что оно содержит операторы объединения таблиц (UNION). Однако с помощью замещающего триггера эта проблема решается. Создадим следующий триггер:
CREATE TRIGGER Update_Buildings INSTEAD OF UPDATE ON ALL ВUILDINGS FOR EACH ROW BEGIN UPDATE FACULTY SET Building =:NEW.Building WHERE Building =:OLD.Building; UPDATE DEPARTMENT SET Building =:NEW.Bull ding WHERE Building =:OLD.Building; UPDATE ROOM SET Building =:NEW.Building
WHERE Building =:OLD.Building; END;
Он инициируется вместо выполнения операции обновления нашего представления и последовательно изменяет номера корпусов во всех трех таблицах. Теперь наше предложение обновления выполнится:
UPDATE ALLJUILDINGS SET Building = ’б/А’ WHERE Building = ‘б1; 1 строка обновлена.
Не удивляйтесь, что подсказка указала на обновление одной строки. Это обновление одной строки представления, а фактически произошло обновление шести строк трех таблиц учебной базы данных.
Событие триггера Допускается специфицировать события трех типов. - Определение объектов базы данных, к которым относятся, в частности, известные нам предложения CREATE, ALTER и DROP. - Манипулирование базой данных, к которым относятся команды INSERT, DELETE, UPDATE. Однако с одним триггером можно связать сразу несколько событий. Любое из указанных событий будет запускать триггер. В этом случае предусматривается использование так называемых условных предикатов для обнаружения, какой тип предложения манипулирования действительно инициировал триггер. Таким образом, можно создать один триггер, который выполняет различный программный код в зависимости от предложения, инициировавшего триггер. - Операции над базой данных в целом (так называемые системные события), к которым относятся, например, возникновение системной ошибки, подключение к системе пользователя и программы или их отключение, открытие или закрытие базы данных и др.
Объект триггера Для событий, связанных с манипулированием базой данных, к объектам триггера, помимо базовых таблиц, относятся также представления. Кроме того, для событий двух других видов объектами триггера являются схема базы данных и вся база данных в целом.
Действие триггера Выразительные способности тела триггера намного выше по сравнению со стандартом SQL в связи с возможностью использовать язык программирования PL/SQL.
|
|||||
Последнее изменение этой страницы: 2021-05-27; просмотров: 92; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.222.115.120 (0.006 с.) |