
- •Общая характеристика субд Access. Создание и редактирование базы данных средствами субд Access. Свойства реляционной таблицы. Отношения между таблицами.
- •9Структуру стандарта sql.Типы данных и операции , агрегирующие функции. Примеры.
- •19 Администрирование бд и управление объектами. Разграничение доступа. Привилегии, роли
- •20 Управл парал-ной обработкой данных. Блокировки
- •13 Общая концепция субд Oracle
- •15.Курсоры , их атрибуты. Использования цикла for при работе с курсорами.
- •18.Триггеры.Объявление, назначение и примеры использования. Модификация триггеров.
- •16.Обработка исключений.Пользовательские исключения.Возбуждение исключений.
- •Возбуждение исключений
- •3. По аналогии с левым можно определить правое внешнее соединение. Перепишем предыдущий пример с использованием его возможностей:
- •Модификация данных
- •Модификация объектов базы данных
- •Создание таблиц. Ограничения
- •Последовательности
- •Модификация и удаление таблиц
- •Представления
- •14. Язык pl/sql. Основные типы данных и операторы
- •Структура программы
- •Идентификаторы и описания переменных
- •Типы данных
- •Процедурные операторы
- •Особенности записи операторов sql
- •17.Подпрограммы. Хранимые подпрограммы. Пакеты.
- •Хранимые подпрограммы
18.Триггеры.Объявление, назначение и примеры использования. Модификация триггеров.
Триггер - это специальный вид хранимой программы PL/SQL, который ассоциирован с конкретной таблицей базы данных. Триггер автоматически запускается каждый раз, когда выполняется оператор SQL INSERT, UPDATE либо DELETE, вносящий изменения в эту таблицу. формальное описание триггера.
CREATE [ OR REPLACE ] TRIGGER [имясхемы.]имятриггера
{AFTER | BEFORE} {INSERT | UPDATE [OF списокстолбцов]| DELETE }
ON ассоциированнаятаблица
[FOR EACH ROW] [WHEN ограничениетриггера]
[DECLARE
описания]
BEGIN
телотриггера
END [имятриггера];
Выполнение триггера может завершиться либо нормально либо генерацией исключительной ситуации (вызовом процедуры raise_application_error). В последнем случае выполнение всего оператора DML прекращается, и выполняется откат к созданной неявно контрольной точке.
При написании триггеров необходимо соблюдать следующие ограничения:
запрещается использовать операторы управления транзакциями как в самом триггере, так и в подпрограммах, которые этот триггер вызывает;
в теле триггера нельзя объявлять переменные с типами LONG и LONG RAW.
из тела триггера нельзя обращаться к т.н. изменяющимся таблицам (mutating tables). Обсуждение вопросов, связанных с изменяющимися таблицами, будет выполнено позднее в этом разделе.
В теле строкового триггера можно использовать префиксы :new и :old, которые иногда называют коррелирующими именами. С помощью этих префиксов можно обращаться как к новым, так и к старым значениям изменяемых полей, например:
IF :new.minsalary < :old.minsalary THEN …
Триггеры предназначены для решения следующих задач:
поддержка логической целостности базы данных, особенно в тех случаях, когда недостаточно встроенных ограничений или если данные находятся в различных узлах распределенной базы данных;
реализация сложных бизнес-правил;
контроль доступа к базе данных;
выполнение специфического аудита изменений в базе данных;
отслеживания системных событий
Пример Напишем триггер, который заполняет пустыми значениями поле deptno в таблице career при удалении соответствующего подразделения из таблицы dept.
CREATE OR REPLACE TRIGGER dept_bd1
BEFORE DELETE ON dept
FOR EACH ROW
BEGIN
UPDATE career SET deptno = NULL
WHERE deptno=:old.deptno;
END dept_bd1;
Из тела триггера можно обращаться не ко всем таблицам и столбцам. Чтобы определить, к каким таблицам возможен доступ, необходимо ввести понятие изменяющихся и ограничивающих таблиц. Изменяющаяся таблица— это таблица, которая в данный момент модифицируется оператором DML. Для триггера это та таблица, для которой он был создан. Таблицы, обновляющиеся в результате реализации ограничений ссылочной целостности ON DELETE CASCADE (каскадного удаления), также являются изменяющимися. Ограничивающая таблица— это таблица, информация которой может быть считана при реализации ограничения ссылочной целостности.
Триггеры Oracle не могут:
считывать или модифицировать информацию любой таблицы, изменяющейся в результате выполнения активизирующего оператора. В число таких таблиц входит и сама активизирующая таблица.
считывать или модифицировать информацию столбца первичного ключа, уникальных столбцов и столбцов внешних ключей таблицы, являющейся ограничивающей по отношению к изменяющейся таблице. С другими столбцами можно работать без каких-либо ограничений.
Эти правила верны для всех строковых триггеров. Для операторных триггеров они применимы только в тех случаях, когда те активизируются в результате выполнения операции каскадного удаления информации.Модификация триггеров
Триггеры, в отличие от обычных хранимых подпрограмм, триггеры компилируются автоматически при каждом возбуждении, если из-за изменений влияющих на него объектов они становятся недействительными. Поэтому для них не имеет смысла определять статус VALID или INVALID. Однако можно, не удаляя триггер, запретить (disable) или вновь разрешить (enable) его использование. Когда триггер запрещен, он по-прежнему находится в словаре данных, но никогда не активизируется. Для запрещения или разрешения триггера применяется оператор
ALTER TRIGGER имятриггера {DISABLE | ENABLE};При создании каждого триггера его использование по умолчанию разрешено. Кроме того, при помощи команды ALTER TABLE можно разрешить или запретить использование всех триггеров определенной таблицы, если добавить в эту команду конструкцию ENABLE ALL TRIGGERS (разрешить все триггеры) или DISABLE ALL TRIGGERS (запретить все триггеры). Например:
ALTER TABLE students ENABLE ALL TRIGGERS;
Анализировать состояние триггера можно, выполнив запрос к элементу словаря данных user_triggers, например:
SELECT trigger_name, table_name, triggering_event, status
FROM user_triggers;
для удаления триггера достаточно выполнить команду
DROP TRIGGER имятриггера;
Кроме триггеров, позволяющих реагировать на события, связанные с изменениями в таблицах базы данных, Oracle дает возможность отслеживать некоторые другие события.Триггер INSTEAD OF может быть применен к представлению, образованному в результате соединения нескольких таблиц. Если поле, объявленное как первичный ключ в одной из исходных таблиц, может несколько раз повториться в представлении, то такое представление является не модифицируемым. Однако триггер скрывает от пользователей эту особенность.С помощью триггера можно отслеживать модификацию объектов базы данных. В этом случае условия этих триггеров записываются как {BEFORE | AFTER} {ALTER | CREATE | DROP |…} ON {SCHEMA | DATABASE}