Sql ORA-04079:触发器规范无效

Sql ORA-04079:触发器规范无效,sql,oracle,plsql,triggers,Sql,Oracle,Plsql,Triggers,我试图创建一个触发器,在表中更新两个字段时对它们进行审核。 我已经尝试编译PL/SQL,但是下面的错误不断出现 ORA-04079: invalid trigger specification 参考其他SO问题,他们提到使用Declare或As解决此问题 CREATE OR REPLACE TRIGGER AUDIT_TRIGGER BEFORE UPDATE OF MR_STATE, IS_EXEMPT ON CX_MR mr FOR EACH ROW BEGIN IF UPDAT

我试图创建一个触发器,在表中更新两个字段时对它们进行审核。 我已经尝试编译PL/SQL,但是下面的错误不断出现

ORA-04079: invalid trigger specification
参考其他SO问题,他们提到使用DeclareAs解决此问题

CREATE OR REPLACE TRIGGER AUDIT_TRIGGER
BEFORE UPDATE OF MR_STATE, IS_EXEMPT
ON CX_MR mr
FOR EACH ROW
BEGIN
     IF UPDATING ('MR_STATE') THEN 
          INSERT INTO CX_AUDIT
          (
          INT_ID,
          FIELD_NAME,
          OLD_VAL,
          NEW_VAL,
          CHANGED_DATE,
          CHANGED_BY
          )
          VALUES
          (
          mr.INTEGRATION_ID,
          'MR_STATE',
          :old.MR_STATE,
          :new.MR_STATE,
          SYSDATE,
          'Trigger'
          );
     END IF;

    IF UPDATING ('IS_EXEMPT') THEN 
          INSERT INTO CX_AUDIT
          (
          INT_ID,
          FIELD_NAME,
          OLD_VAL,
          NEW_VAL,
          CHANGED_DATE,
          CHANGED_BY
          )
          VALUES
          (
          mr.INT_ID,
          'IS_EXEMPT',
          :old.IS_EXEMPT,
          :new.IS_EXEMPT,
          SYSDATE,
          'Multiroom'
          );
     END IF;
END;

但是,我不确定我应该声明什么,或者这是否是解决方案。

错误似乎是在表名
CX\u mr
之后有一个额外的标记“mr”。不能在触发器定义中为表名添加别名


然后,您似乎继续尝试使用触发器主体中的别名。删除“mr”标记后,触发器的头应该会编译,但在
INSERT
语句中使用
mr
时会出现编译错误。我不确定我是否理解你在那里试图做什么,尽管。。。您似乎知道如何使用
:new
:old
伪记录来获取新旧值。我猜您只需要在两个
INSERT
语句中使用
:new.int\u id
。但我不清楚您是否出于某种原因避免使用该构造,以及您是否希望
mr.int\u id
有所不同。

在我的cx\u audit和cx\u mr表中,两个主键都是“int\u id”,我想防止plsql@serupticious-我没听懂。如果
int\u id
cx\u audit
中的主键,则必须从每个
INSERT
的序列生成它,并且它与
cx\u mr
表中的
int\u id
列没有关系。这似乎不太可能是正确的。您是否希望
mr.int\u id
:new.int\u id
有所不同?在放置新的.int\u id而不仅仅是列名后,它现在可以工作了。谢谢