2010-02-25 106 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