Указание момента инициирования триггера. Предоставляется возможность указать, что определяемый триггер выполняется вместо 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Указание момента инициирования триггера. Предоставляется возможность указать, что определяемый триггер выполняется вместо



Предоставляется возможность указать, что определяемый триггер выполняется вместо предложения-события. Для этого используется фраза 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 с.)