Сбой триггера Oracle -ORA-04098 - PullRequest
       11

Сбой триггера Oracle -ORA-04098

2 голосов
/ 25 февраля 2010

У меня есть таблица, для которой я написал триггер:

CREATE OR REPLACE TRIGGER ac01_control_trigg
AFTER INSERT ON ac1_control_test 
FOR EACH ROW
DECLARE
    BEGIN
   IF :NEW.cur_pgm_name = 'LSN' 
   AND :NEW.nxt_pgm_name ='MD' 
   AND :NEW.file_status='RD' THEN 
    INSERT INTO ac1_control_test 
    (FILE_NAME, FILE_PATH,FILE_STATUS,CUR_PGM_NAME,NXT_PGM_NAME)
    VALUES 
   (:NEW.FILE_NAME, :NEW.FILE_PATH,:NEW.FILE_STATUS,:NEW.CUR_PGM_NAME,'MD_MPS');   
END IF;
END ac01_control_trigg;

, когда я пытаюсь вставить в таблицу, я получаю сообщение об ошибке ниже!

ORA-04098: trigger 'CNGDB18.AC01_CONTROL_TRIGG' is invalid and failed re-validation

можетКто-нибудь, пожалуйста, помогите?

также, когда я компилирую триггер в Toad, я получаю ошибки компиляции, как показано ниже:

LINE/COL ERROR
-------- -----------------------------------------------------------------
3/65     PLS-00049: bad bind variable 'NEW_FILE_STATUS'

но что не так с этим?и что означает эта ошибка?

1 Ответ

3 голосов
/ 25 февраля 2010

РЕДАКТИРОВАТЬ : Теперь, когда мы видим сообщение, решение легко:)

Использование:NEW.file_status='RD' вместо:new_file_status='RD'


Ваш триггерный объект недействителен (есть проблема с кодом).

Проверьте это с помощью:

SELECT object_name, status
FROM user_objects
WHERE object_name = 'AC1_CONTROL_TRIGG';

Должен вернуть:AC1_CONTROL_TRIGG INVALID

Вы можете попробовать следующее в SQL*Plus, чтобы получить описание ошибки:

ALTER TRIGGER ac1_control_trigg COMPILE;

SHOW ERROR TRIGGER ac1_control_trigg;

Используя TOAD, вы можете просто набрать эти две строки в редакторе, выбратьих и использовать Editor> Execute SQL via SQL*Plus.

...