我有一张表,我已经写了一个触发器:
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'
但是这有什么问题? 这个错误意味着什么?
答案 0 :(得分: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;
使用TOAD,您只需在编辑器中输入这两行,选择它们并使用Editor
> Execute SQL via SQL*Plus
。