#oracle #plsql #database-trigger
#Oracle #plsql #база данных-триггер
Вопрос:
Мне было дано задание создать триггер, который работает, когда таблицы вставляются, обновляются или удаляются в таблице. Если это удаление или обновление, то таблица должна сохранить более старые значения перед выполнением действия в другой таблице. Если это вставка, то новая строка должна быть добавлена в новую таблицу. Также он должен включать количество строк, на которые влияет каждое действие. До сих пор это то, что я делал:
CREATE OR REPLACE TRIGGER archive_update
BEFORE INSERT OR UPDATE ON EMPLOYEE
FOR EACH ROW
BEGIN
INSERT INTO archive_emp(EMP_ID, FIRST_NAME, LAST_NAME, BIRTH_DAY,
SEX, SALARY, SUPER_ID, BRANCH_ID)
VALUES(:new.EMP_ID, :new.FIRST_NAME, :new.LAST_NAME,
:new.BIRTH_DAY, :new.SEX, :new.SALARY, :new.SUPER_ID, :new.BRANCH_ID);
END;
Ответ №1:
Для проверки работы dml вы можете использовать IF
условие с соответствующим предикатом dml
CREATE OR REPLACE TRIGGER archive_update
BEFORE
INSERT OR UPDATE ON EMPLOYEE
FOR EACH ROW
BEGIN
IF UPDATING OR DELETING THEN --You may add this
INSERT INTO archive_emp( emp_id, first_name, last_name,
birth_day, sex,salary,super_id,branch_id
) VALUES (:old.emp_id, :old.first_name,:old.last_name,:old.birth_day,
:old.sex,:old.salary,:old.super_id,:old.branch_id
);
ELSIF INSERTING THEN --and this
INSERT INTO archive_emp( emp_id, first_name, last_name,
birth_day, sex,salary,super_id,branch_id
) VALUES (:new.emp_id, :new.first_name,:new.last_name,:new.birth_day,
:new.sex,:new.salary,:new.super_id,:new.branch_id
);
END IF;
END;
/
Комментарии:
1. Я использовал ваш код, и он работает. Большое вам спасибо