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
有人可以帮忙吗?
另外,当我在 Toad 中编译触发器时,我收到如下编译错误:
LINE/COL ERROR
-------- -----------------------------------------------------------------
3/65 PLS-00049: bad bind variable 'NEW_FILE_STATUS'
但这有什么问题吗? 这个错误是什么意思?
I have a table for which i have written a trigger:
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;
when i am trying to insert into the table i am getting an error below!
ORA-04098: trigger 'CNGDB18.AC01_CONTROL_TRIGG' is invalid and failed re-validation
could anybody please help?
also when i compile the trigger in Toad,i am getting compile errors as below:
LINE/COL ERROR
-------- -----------------------------------------------------------------
3/65 PLS-00049: bad bind variable 'NEW_FILE_STATUS'
but what is the wrong with this?
and what does this error mean?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
编辑:现在我们看到了该消息,解决方案很简单:)
使用
:NEW.file_status='RD'
而不是: new_file_status='RD'
您的触发器对象无效(代码有问题)。
对此进行测试:
应返回:
AC1_CONTROL_TRIGG INVALID
您可以在
SQL*Plus
中尝试以下操作来获取错误描述:使用 TOAD,您只需键入将这两行放入编辑器中,选择它们并使用
Editor
>通过 SQL*Plus 执行 SQL
。EDIT: Now that we see the message, the solution is easy :)
Use
:NEW.file_status='RD'
instead of:new_file_status='RD'
Your trigger object is invalid (there is a problem with the code).
Test this with:
Should return:
AC1_CONTROL_TRIGG INVALID
You can try the following in
SQL*Plus
to get a description of the error:Using TOAD, you can just type these two lines into an editor, select them and use
Editor
>Execute SQL via SQL*Plus
.