- •Триггеры в PL / SQL
- •Триггер в PL/SQL
- •Именование триггеров
- •Срабатывание триггера (1)
- •Срабатывание триггера (2)
- •Триггерное событие (1)
- •Триггерное событие (2)
- •Триггерное ограничение
- •Виды триггеров (1)
- •Виды триггеров (2)
- •Виды триггеров (3)
- •Проектирование триггеров (1)
- •Проектирование триггеров (2)
- •Создание триггеров
- •Псевдозаписи OLD и NEW
- •Пример триггера - 1
- •Создание таблицы CATALOGS_LOG
- •Создание триггера CAT_CHANGE_TRIGGER
- •Результаты работы триггера
- •Пример триггера - 2
- •Создание последовательности CATALOGS_SEQ
- •Создание триггера NEW_CATALOG_TRIGGER (1)
- •Создание триггера NEW_CATALOG_TRIGGER (2)
- •Создание триггера NEW_CATALOG_TRIGGER (3)
- •Создание триггера NEW_CATALOG_TRIGGER (4)
- •Результаты работы триггера
- •Пример триггера - 3
- •Пример триггера - 3
- •Пример триггера - 4
- •Пример триггера - 4
- •Пример триггера - 4
- •Пример создания триггера INSTEAD OF
- •Создание представления USER_NAME
- •Просмотр представления USER_NAME
- •Создание триггера
- •Проверка работы триггера
- •Пример использования системных триггеров
- •Создание таблицы OLEG_USERS_LOG
- •Создание триггера OLEG_LOGON_TRIGGER
- •Создание триггера OLEG_LOGOFF_TRIGGER
- •Проверка работы триггеров
- •Изменение триггеров (1)
- •Изменение триггеров (2)
- •Включение и выключение триггеров
- •О компиляции и зависимостях триггеров (1)
- •О компиляции и зависимостях триггеров (2)
- •О компиляции и зависимостях триггеров (3)
- •Удаление триггеров
- •Модификация триггеров
- •Тонкости, касающиеся триггеров (1)
- •Тонкости, касающиеся триггеров (2)
Создание последовательности CATALOGS_SEQ
Создание триггера NEW_CATALOG_TRIGGER (1)
1.На вкладке Connections разверните bookshop-XE. Появится список типов объектов схемы.
2.Щелкните ПКМ Triggers. Появится список выбора.
3.Нажмите New Trigger. Откроется окно Create trigger. Поле Schema имеет значение bookshop и поле Name имеет значение по умолчанию Trigger1.
4.В поле Name введите NEW_CATALOG_TRIGGER вме- сто значения по умолчанию.
5.На вкладке Trigger в поле Table Name из меню выбери- те CATALOGS, выберите пункт Row Lewel, установите флажок Insert, нажмите ОК.
Создание триггера NEW_CATALOG_TRIGGER (2)
Создание триггера NEW_CATALOG_TRIGGER (3)
6.Открывается панель, показывающая оператор CREATE TRIGGER
6.Название NEW_EVALUATION_TRIGGER панели дано курсивом (триггер еще не сохранен в БД).
Создание триггера NEW_CATALOG_TRIGGER (4)
8.В операторе CREATE TRIGGER замените NULL следующим:
:NEW.cat_ID : = CATALOGS_SEQ.NEXTVAL
nВ меню File выберите Save.
nOracle Database XE компилирует процедуру и сохраняет ее. Название NEW_CATALOG_TRIGGER на панели больше не выделяется курсивом.
Результаты работы триггера
Пример триггера - 3
В демонстрационной БД таблица Orders не хранит сумму заказа, которая является производной величиной
(o_number * b_price).
Можно создать в этой таблице столбец o_summa, разре- шив для него значения NULL.
На таблицу Orders устанавливается триггер, который перед вставкой или обновлением заказа автоматически вычисляет сумму заказа и заносит в соответствующий столбец.
Пример триггера - 3
CREATE OR REPLACE TRIGGER ord_summa BEFORE INSERT OR UPDATE
ON Orders
FOR EACH ROW DECLARE
price NUMBER(7, 2);
BEGIN
SELECT b_price INTO price FROM Books WHERE Books.book_ID = :NEW.o_book_ID ; :NEW.o_summa := : NEW . o_number * price ;
END ord_summa;
Пример триггера - 4
CREATE OR REPLACE TRIGGER proverka BEFORE UPDATE
ON Orders
FOR EACH R OW DECLARE
no_name_change EXCEPTION; BEGIN
IF (:NEW.o_book_ID <> :OLD.o_book_ID) THEN
RAISE no_name_change; END IF;
Пример триггера - 4
EXCEPTION
WHEN no_name_change THEN
dbms_output.put_line ('Изменение вида товаров в заказах запрещено');
dbms_output.put_line ('Прервано и возвращены старые значения');
:NEW.order_ID := :OLD.order_ID; :NEW.o_user_ID := :OLD.o_user_ID; :NEW.o_book_ID := :OLD.o_book_ID; :NEW.o_time := :OLD.o_time; :NEW.o_number := :OLD.o_number;
END proverka;