FOR EACH ROW

FOR EACH ROW

FOR EACH ROW

Примеры

Пример 1. Пусть определены следующие таблицы:

EMPLOYEE (EmpID, EmpName, Addr, Position) – содержит информацию обо всех сотрудниках предприятия;

COMPANY_STATS (NBEmp, NBProduct, Revenue) – содержит обобщенную информацию о предприятии; здесь NBEmp – общее количество сотрудников предприятия, NBProduct – общий объем выпускаемой продукции, Revenue – общий доход.

Требуется создать два триггера, автоматически отслеживающие изменение общего количества сотрудников предприятия.

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

CREATE TRIGGER NEW_HIRED

AFTER INSERT ON EMPLOYEE

UPDATE COMPANY_STATS SET NBEMP = NBEMP + 1

Второй триггер уменьшает общее количество сотрудников при увольнении сотрудника, т.е. каждый раз, когда из таблицы EMPLOYEE удаляется строка:

CREATE TRIGGER FORMER_EMP

AFTER DELETE ON EMPLOYEE

UPDATE COMPANY_STATS SET NBEMP = NBEMP - 1

Пример 2. Пусть определена следующая таблица:

EMPLOYEE (EmpID, EmpName, Addr, Position, Salary) – содержит информацию обо всех сотрудниках предприятия; здесь Salary – оклад сотрудника.

Требуется создать триггер, который вернет сообщение об ошибке, если оклад какого-либо сотрудника увеличивается более чем на 10% по сравнению с текущим окладом.

CREATE TRIGGER RAISE_LIMIT

AFTER UPDATE OF SALARY ON EMPLOYEE

REFERENCING NEW AS N OLD AS O

WHEN (N.SALARY > 1.1 * O.SALARY)

SIGNAL SQLSTATE ’75000’ SET MESSAGE_TEXT =’Salary increase>10%’

Пример 3. Пусть определена следующая таблица:

PARTS(PartNo, Descr, OnHand, MaxStocks, Price) – содержит информацию о деталях, хранящихся на складе; здесь OnHand – количество деталей, имеющееся в данный момент на складе, MaxStocks – максимальное количество деталей, которое может храниться на складе.

В соответствии с правилами бизнес логики, текущее количество деталей не может быть меньше 10% от максимального. Если в процессе работы данное условие нарушается, должен быть отправлен запрос на поставку дополнительного количества деталей.

Требуется создать триггер, который реализует представленное выше правило бизнес логики. Триггер должен активироваться при обновлении значений колонок OnHand и MaxStocks. Для отправки сообщения используется функция ISSUE_SHIP_REQUEST, определенная пользователем. Функция имеет два параметра: номер детали и требуемое количество деталей.

CREATE TRIGGER REORDER

AFTER UPDATE OF OnHand, MaxStocks ON PARTS

REFERENCING NEW AS N


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: