Предполагается, что у меня есть данные в главной таблице, называемой СОТРУДНИКАМИ, с данными ниже образца:
СОТРУДНИКИ
+--------+----------+
| EMP_ID | EMP_NAME |
+--------+----------+
| 100 | Smith |
| 200 | Clark |
+--------+----------+
Теперь, если таблица вставлена с новыми данными или обновленадля существующих данных;тогда данные выглядят следующим образом: СОТРУДНИКИ
+--------+----------+
| EMP_ID | EMP_NAME |
+--------+----------+
| 100 | Blake | <---- UPDATE with different value
| 200 | Clark | <---- UPDATE with same value
| 300 | Mary | <---- INSERT
+--------+----------+
Где строки с EMP_ID 100 и 200 являются действием обновления, а EMP_ID с 300 вставляется как его новая запись.
Я написал триггер для захвата вставки или обновления изменений в столбце EMP_NAME, только если OLD emp_name NOT EQUAL TO NEW emp_name для соответствующего EMP_ID.(Я не хочу иметь дубликаты EMP_ID в моей таблице аудита под названием EMPLOYEE_AUDITS).Ниже приведен триггер:
CREATE OR REPLACE TRIGGER employee_audits_tr
INSERT OR UPDATE ON employees
FOR EACH ROW
BEGIN
IF ( inserting OR updating AND :old.emp_name <> :new.emp_name ) THEN
INSERT INTO employee_audits(emp_id, old_emp_name,new_emp_name)
VALUES(emp_id, :old.emp_name, :new.emp_name )
WHERE emp_id = :new.emp_id;
END IF;
END;
Попытка получить вывод для EMPLOYEE_AUDITS, как показано ниже, на основе данных, предоставленных выше EMPLOYEE_AUDITS
+----+--------+--------------+--------------+
| ID | EMP_ID | OLD_EMP_NAME | NEW_EMP_NAME |
+----+--------+--------------+--------------+
| 1 | 100 | Smith | Blake |
| 2 | 300 | NULL | Mary |
+----+--------+--------------+--------------+
Для следующей итерации, когда СОТРУДНИКИтаблица снова обновляется новыми данными, указанными ниже: СОТРУДНИКИ
+--------+----------+
| EMP_ID | EMP_NAME |
+--------+----------+
| 100 | Karla | <---- UPDATE with NEW value
| 200 | Clark | <---- UPDATE with same value
| 300 | James | <---- UPDATE with NEW value
| 400 | Sofia | <---- INSERT
+--------+----------+
EMPLOYEE_AUDITS таблица должна содержать значения, как показано ниже:
EMPLOYEE_AUDITS
+----+--------+--------------+--------------+
| ID | EMP_ID | OLD_EMP_NAME | NEW_EMP_NAME |
+----+--------+--------------+--------------+
| 1 | 100 | Blake | Karla |
| 2 | 300 | Mary | James |
| 3 | 400 | NULL | Sofia |
+----+--------+--------------+--------------+
С помощью триггера я получаю ошибку, как показано ниже:
Ошибки PLS-00049, PL / SQL: ORA-00933
Благодарю всех вас заранееи признателен за любую помощь.
Спасибо,
Рича