Триггеры чаще всего "вешаются" на таблицы. В триггерах пишут, какие действия нужно совершить перед изменением данных в таблице или после изменения данных в таблице. По этому признаку триггеры бывают BEFORE и AFTER. Триггеры можно "вешать" на события INSERT, UPDATE, DELETE. В триггерах можно проверять, какое именно из действий совершается (IF inserting THEN ..., IF updating THEN ..., IF deleting THEN ..., ), а также обращаться к предыдущим и новым значениям полей (например, v_old_id := :old.ID; :new.ID := v_new_id).
Подробности мы разберем в задачах ниже.
Задача. Автоинкрементное поле.
Создать таблицу KK_14 с полями ID и VAL, создать сиквенс SQ_KK_14.
Написать BEFORE INSERT триггер, который делает следующее: если при вставке в KK_14 не указано ID, то значение ID берется из сиквенса SQ_KK_14. Это реализация автоинкрементного поля.
Создадим таблицу и сиквенс:
CREATE TABLE KK_14(ID NUMBER, VAL VARCHAR2(20));
CREATE SEQUENCE SQ_KK_14;
Создадим триггер:
CREATE OR REPLACE TRIGGER KK_TRIG_BI_KK_14
BEFORE INSERT ON KK_14
FOR EACH ROW
BEGIN
IF :NEW.ID IS NULL THEN
SELECT SQ_KK_14.NEXTVAL INTO :NEW.ID FROM DUAL;
END IF;
END KK_TRIG_BI_KK_14;
Вставляем строки, не указав значения поля ID:
INSERT INTO KK_14(VAL) VALUES ('FJI');
INSERT INTO KK_14(VAL) VALUES ('SDA');
Проверяем, что ID заполнились из сиквенса:
SELECT * FROM KK_14;