2010-02-25 83 views
2

我有我寫了一個觸發器的表:Oracle觸發器失敗-ORa-04098

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 

有人可以請幫忙嗎?

還當我在蟾蜍編譯扳機,我得到如下編譯錯誤:

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

但什麼是問題呢? 這個錯誤是什麼意思?

回答

3

編輯:現在我們所看到的消息,該解決方案易於:)

使用
: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; 

使用蟾蜍,你可以將這兩行輸入到編輯器中,選擇它們並使用Editor>Execute SQL via SQL*Plus

+0

thanks..i編輯我question.but仍是問題不解決:( – Vijay 2010-02-25 14:38:52

+0

感謝彼得。問題就解決了:) – Vijay 2010-02-26 04:34:15

+0

很高興聽到:) – 2010-02-26 06:53:03