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