Как в триггере для автоматического обновления данных указать условие на изменение столбца?
У меня есть две таблицы:
CREATE TABLE emp (
emp_no NUMBER,
emp_name VARCHAR2(50),
salary NUMBER,
manager VARCHAR2(50),
dept_no NUMBER)
/
CREATE TABLE dept (
Dept_no NUMBER,
Dept_name VARCHAR2(50),
LOCATION VARCHAR2(50))
/
Я хотел бы иметь триггер со следующим условием:
когда данные для столбца dept.dept_noизменяются вручную (новая запись, изменение предыдущей записи, удаление данных), столбец emp.dept_no должен обновляться автоматически.
Понимаю, что начало триггера должно быть:
CREATE OR REPLACE TRIGGER dept_no_update
AFTER DELETE OR INSERT OR UPDATE ON dept FOR EACH ROW
DECLARE
BEGIN UPDATE emp ...
Как правильно задекларировать вторую часть и верно указать, что изменения должны происходить после внесения коррекций именно для колонки dept_no?
Ответы (1 шт):
Условие, что измененился именно заданный столбец в таблице, следует указать оператором WHEN до PL/SQL блока, то есть в «первой части» триггера:
create or replace trigger dept_no_update
after delete or update on dept for each row
when (coalesce (new.dept_no, -old.dept_no ) != old.dept_no)
declare
begin
update emp set dept_no = :new.dept_no
where dept_no = :old.dept_no;
end;
/
Trigger DEPT_NO_UPDATE compiled
PS условие на срабатывание по INSERT опустил, так как в вопросе нет информации, что должно произойти в случая вставки новой записи.