Невозможно скомпилировать триггер для журнала изменений в таблице oracle - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть таблица с именем Customers. Когда я удаляю или обновляю любое значение в таблице, я хотел бы записать это в новую таблицу, которую я создаю с кодом ниже. Проблема в том, что я не могу получить старые значения (значения, которые существовали до удаления), чтобы вставить их в таблицу журнала изменений. Код работает, только если я комментирую старую часть значений. Что я делаю неправильно?

Оператор DDL для создания таблицы журнала:

CREATE TABLE customersHistory(
    tablename VARCHAR2(30),
    transactionType VARCHAR2(30),
    username VARCHAR2(30),
    transactionDate DATE,
    savedName VARCHAR2(50),
    savedSurname VARCHAR2(50));

и блок кода для создания соответствующего триггера базы данных:

CREATE OR REPLACE TRIGGER custModify
AFTER DELETE OR UPDATE ON Customers
FOR EACH ROW
DECLARE
  tableName    customersHistory.Tablename%type := 'Customers';
  typeOfChange customersHistory.Transactiontype%type;
  person       customersHistory.Username%type := USER;
  dateOfRecord customersHistory.Transactiondate%type;
  cname        customersHistory.Savedname%type;
  csurname     customersHistory.Savedsurname%type;        
BEGIN
    IF DELETING THEN
        typeOfChange :='Silme';
        dateOfRecord := SYSDATE;
        cname := OLD.c_name;
        csurname := OLD.c_surname;
    ELSIF UPDATING THEN
        typeOfChange :='Güncelleme';
        dateOfRecord := SYSDATE;
        cname := OLD.c_name;
        csurname:= OLD.c_surname;
    END IF;

    INSERT INTO customersHistory
    VALUES(tableName, typeOfChange, person, dateOfRecord, cname, csurname);

END;

ошибка:

Trigger CUSTMODIFY compiled

LINE/COL  ERROR
--------- -------------------------------------------------------------
13/9      PL/SQL: Statement ignored
13/18     PLS-00201: identifier 'OLD.C_NAME' must be declared
14/9      PL/SQL: Statement ignored
14/21     PLS-00201: identifier 'OLD.C_SURNAME' must be declared
18/9      PL/SQL: Statement ignored
18/18     PLS-00201: identifier 'OLD.C_NAME' must be declared
19/9      PL/SQL: Statement ignored
19/20     PLS-00201: identifier 'OLD.C_SURNAME' must be declared
Errors: check compiler log
...