Создание триггера для вставки и удаления строк - PullRequest
0 голосов
/ 23 апреля 2019

Мне было дано задание на создание триггера, который работает, когда таблицы вставляются, обновляются или удаляются в таблице. Если это удаление или обновление, то таблица должна хранить более старые значения перед действием над другой таблицей. Если это вставка, то новая строка должна быть добавлена ​​в новую таблицу. Также оно должно включать количество строк, на которые влияет каждое действие. Пока это то, что я сделал:

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 Ответ

1 голос
/ 23 апреля 2019

Для проверки операции 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;
/
...