Oracle 触发器失败 -ORA-04098

发布于 2024-08-22 22:32:43 字数 881 浏览 4 评论 0原文

我有一个表,我为其编写了一个触发器:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

顾铮苏瑾 2024-08-29 22:32:43

编辑:现在我们看到了该消息,解决方案很简单:)

使用
: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>通过 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:

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

Should return:
AC1_CONTROL_TRIGG INVALID

You can try the following in SQL*Plus to get a description of the error:

ALTER TRIGGER ac1_control_trigg COMPILE;

SHOW ERROR TRIGGER ac1_control_trigg;

Using TOAD, you can just type these two lines into an editor, select them and use Editor>Execute SQL via SQL*Plus.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文