- •АвОсновные понятия баз данных. Этапы развития субд. Функции субд. Требования к системам управления базами данных.
- •Архитектура баз данных. Логическая и физическая независимость данных. Схема прохождения запросов к бд.
- •Классификация моделей данных. Архитектура и модели "клиент-сервер" в технологии бд.
- •Реляционная модель бд, ее основные достоинства. Таблица, кортеж, атрибут, домен, первичный ключ, внешний ключ. Фундаментальные свойства отношений.
- •Обеспечение целостности данных.
- •Основы реляционной алгебры. Операторы реляционной алгебры.
- •6.1. Основы реляционной алгебры
- •6.2. Операторы реляционной алгебры
- •Понятия полной и транзитивной функциональной зависимости. Нормализация, третья нормальная форма, шаги нормализации.
- •7.1. Понятия полной и транзитивной функциональной зависимости
- •7.2. Нормализация, третья нормальная форма, шаги нормализации
- •Модель «объект-свойство-отношение», er-диаграммы, проектирование схемы баз данных.
- •8.1. Модель «объект-свойство-отношение»
- •8.3. Проектирование схемы баз данных
- •Язык sql, его структура, стандарты, история развития. Подмножество языка dml: операторы select, insert, update, delete.
- •Структура языка sql
- •Вставка множества записей
- •Оператор изменения значений полей update
- •Оператор удаления строк delete
- •Подмножество языка ddl: операторы create, alter, drop. Представления, их значение; обновляемые представления.
- •10.1. Подмножество языка ddl: операторы create, alter, drop Оператор create - создание таблицы.
- •Создание внешнего ключа
- •Оператор drop
- •10.2. Представления, их значение; обновляемые представления
- •Создание и удаление представлений
- •Обновляемые представления
- •Подмножество языка dcl: операторы grant, revoke. Системные привилегии, привилегии на объекты, роли.
- •Объектные и системные привилегии
- •Операторы grant и revoke
- •Транзакции, операторы управления транзакциями: commit, rollback, savepoint; журнал транзакций, уровни блокировок.
- •Операторы управления транзакциями
- •Журналы транзакций
- •Язык pl/sql, его структура, основные операторы.
- •Курсоры, явные и неявные курсоры, операторы работы с курсором, оператор select into.
- •Процедуры, функции, пакеты.
- •Триггеры, их основные свойства и значение.
- •Параллельные архитектуры бд; масштабируемость, надежность, производительность.
- •Распределенные базы данных, фрагментация, тиражирование.
- •Средства защиты данных в субд.
- •Шлюзы к базам данных. Архитектура odbc. Www-интерфейс к бд.
- •Объектная модель данных
- •Объектно-ориентированные, объектно-реляционные бд, универсальные бд
- •Эволюция технологий и возможностей субд oracle (oracle 8i, oracle 9i, oracle 10g).
- •Роль grid-технологий в организации хранения и обработки данных. Перспективы развития технологий баз данных.
Триггеры, их основные свойства и значение.
Триггер – это особого вида процедура, которая выполняется автоматически при возникновении некоторого события, указанного в спецификации триггера, - триггерного события (triggering event).
В PL/SQL можно создать триггеры, которые будут срабатывать в одной из следующих ситуаций:
применение оператора DML (INSERT, UPDATE, DELETE) к определенному объекту схемы;
применение оператора DDL (CREATE, ALTER, DROP) внутри схемы или базы данных;
вход пользователя в систему или выход его из системы, ошибка сервера, запуск базы данных или останов базы данных.
Триггеры нельзя вызывать напрямую из кода программы. Oracle вызывает их автоматически в ответ на определенное событие.
Триггеры используются для реализации сложных бизнес-правил. Например, триггер может проверять, истек ли срок продаваемого товара к моменту осуществления сделки продажи, или нет. Если истек, то триггер может выполнять некоторые автоматические действия по предотвращению продажи данного товара.
Триггеры могут обеспечивать прозрачное протоколирование событий, например, отслеживать сколько раз каждый из пользователей обращался к определенной таблице.
Типы триггеров
Момент_срабатывания определяет, когда будет срабатывать триггер: до (BEFORE), после (AFTER) и вместо (INSTEAD OF) наступления триггерного события (выполнения запускающего оператора).
Если указано значение BEFORE, триггер выполняется до каких-либо проверок ограничений на строки, затрагиваемые триггерным событием. Никакие строки не блокируются. Триггер этого типа называется, соответственно, BEFORE-триггером (BEFORE trigger).
Если выбрать ключевое слово AFTER, то триггер будет срабатывать после того, как запускающий оператор завершит свою работу и будут выполнены проверки всех ограничений. В этом случае затрагиваемые строки блокируются на время выполнения триггера. Триггер этого типа называется AFTER-триггером (AFTER trigger).
Триггеры INSTEAD OF применяются только для представлений (VIEW). Проблема состоит в том, что операторы DML не применимы к представлениям. Нельзя добавлять, изменять или удалять записи из представлений. Триггеры INSTEAD OF вызываются вместо выполнения DML-выражений. Если вы выполните оператор DML к представлению, то в соответствующем триггере можно выполнить какие-либо действия, и тогда у пользователя создастся впечатление, что он работает с таблицей.
Триггерное_событие может принимать значения INSERT, UPDATE или DELETE.
Различным триггерные события можно комбинировать с помощью оператора OR. Например:
DELETE OR INSERT остальные_операторы
В случае использования UPDATE можно указать список столбцов, при изменении которых будет срабатывать триггер:
UPDATE OF столбец_1, столбец_2, ...
Пример триггера
Триггер, который будет запрещать изменение имени менеджера (поле NAME).
CREATE OR REPLACE TRIGGER onManagersUpdate
BEFORE UPDATE OF name ON Managers
FOR EACH ROW
DECLARE
cant_change_name EXCEPTION;
BEGIN
IF :new.name<>:old.name THEN
RAISE cant_change_name;
END IF;
EXCEPTION
WHEN cant_change_name THEN
dbms_output.put_line(`Нельзя изменить имя менеджера`);
:new.name:=:old.name;
END;
/
Данный триггер не позволит изменить значение поля NAME в таблице MANAGERS. При попытке сделать это сработает триггер, внутри которого производится сравнение старого значения и нового значения поля NAME. Если они различаются, то активизируется исключение, при обработке которого на экране появится соответствующее сообщение
Удаление триггеров, также как и удаление всех остальных объектов СУБД Oracle, осуществляется посредством оператора DROP:
DROP имя_триггера;
Если по каким-то причинам триггер нужно на время отключить, то это можно сделать при помощи команды ALTER TRIGGER имя_триггера DISABLE;
Обратное включение триггера осуществляется при помощи команды ALTER TRIGGER имя_триггера ENABLE;
Поскольку с одной таблицей могут быть связаны несколько триггеров, то бывает необходимо отключить сразу все эти триггеры. Это делается при помощи команды ALTER TABLE имя_таблицы DISABLE ALL TRIGGERS;
Включение всех триггеров осуществляется командой ALTER TABLE имя_таблицы ENABLE ALL TRIGGERS;