sql - Oracle 触发器失败 -ORA-04098

标签 sql oracle triggers 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'

但这有什么问题吗? 这个错误是什么意思?

最佳答案

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

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

关于sql - Oracle 触发器失败 -ORA-04098,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2334509/

相关文章:

java - 将Triggeres应用于进度openge数据库

javascript - jQuery - 按下按键时执行代码并在释放按键时将其恢复正常

sql - Oracle SQL 在同一个表的多个上选择 null

SQL查询: select the last record where a value went below a threshold

mysql - 协助复杂的 MySQL 查询(使用 LIMIT ?)

sql - JSON - 使用运算符选择值?

c# - Oracle 查询仅在添加随机注释时一致运行

sql - 了解带有 'IIF' 的 Microsoft Office Access SQL 查询

sql - ORA-00904 : Invalid identifier when using dbms_random. 值

sql - 从 SQL 将消息添加到 Azure 服务总线队列