Ошибка запуска после обновления Oracle - PullRequest
0 голосов
/ 16 июня 2011

Я хочу отслеживать изменения одной таблицы в другой таблице. Что мне нужно, так это триггер после обновления, который записывает имя измененного столбца (при изменении нескольких столбцов будет произведено несколько вставок в таблицу CHANGES), старые и новые значения столбца. Как я это сделал. Я попробовал это, но получил ошибку после обновления таблицы. Итак, я даю вам только тело.

IF :NEW.STAJYEAR!=:OLD.STAJYEAR THEN
 INSERT INTO X_STAJ (USERID,EDITDATE,CHANGEDCOLUMN,OLDVALUE,NEWVALUE)
 VALUES (:NEW.USERID,SYSDATE,'STAJYEAR',:OLD.STAJYEAR,:NEW.STAJYEAR);
END IF;

код ошибки: ORA-04098: триггер 'SYS.TR__TRACK_CHANGES' недействителен и не прошел повторную проверку

CREATE OR REPLACE TRIGGER STAJCHANGER.TR_TRACK_CHANGES
AFTER UPDATE
OF STAJYEAR
  ,STAJMONTH
  ,STAJDAY
ON STAJCHANGER.STAJ 
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
DECLARE
OLDVALUE NUMBER;
NEWVALUE NUMBER;
COLUMNID NUMBER;


BEGIN


   IF :NEW.STAJYEAR!=:OLD.STAJYEAR THEN
    INSERT INTO X_STAJ (USERID,EDITDATE,CHANGEDCOLUMN,OLDVALUE,NEWVALUE)
    VALUES (:NEW.USERID,SYSDATE,'STAJYEAR',:OLD.STAJYEAR,:NEW.STAJYEAR);
    END IF;

   IF :NEW.STAJMONTH!=:OLD.STAJMONTH THEN
    INSERT INTO X_STAJ (USERID,EDITDATE,CHANGEDCOLUMN,OLDVALUE,NEWVALUE)
    VALUES (:NEW.USERID,SYSDATE,'STAJMONTH',:OLD.STAJMONTH,:NEW.STAJMONTH);
    END IF; 

       IF :NEW.STAJDAY!=:OLD.STAJDAY THEN
    INSERT INTO X_STAJ (USERID,EDITDATE,CHANGEDCOLUMN,OLDVALUE,NEWVALUE)
    VALUES (:NEW.USERID,SYSDATE,'STAJDAY',:OLD.STAJDAY,:NEW.STAJDAY);
    END IF;

END TR_TRACK_CHANGES;
/

Ответы [ 2 ]

4 голосов
/ 16 июня 2011

Появляется ошибка, указывающая, что владельцем триггера является SYS, но оператор создания, который вы показываете явно, передает его как STAJCHANGER.

Это заставляет меня задуматься, случайно ли вы создали (неверную) версию триггера в SYS в какой-то момент и забыли сбросить ее?

0 голосов
/ 16 июня 2011

Эта команда SQL Plus покажет ошибку:

SHOW ERROR TRIGGER STAJCHANGER.TR_TRACK_CHANGES
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...