Oracle 触发器无效和重新验证错误

Oracle 触发器无效和重新验证错误,oracle,plsql,triggers,Oracle,Plsql,Triggers,我已经执行了下一个查询,并得到了“触发器无效和重新验证”错误。这个问题出了什么问题 CREATE OR REPLACE TRIGGER t BEFORE INSERT OR UPDATE OF sal, deptno OR DELETE ON emp BEGIN CASE WHEN INSERTING THEN DBMS_OUTPUT.PUT_LINE('Inserting'); WHEN UPDATING('sal') THEN

我已经执行了下一个查询,并得到了“触发器无效和重新验证”错误。这个问题出了什么问题

CREATE OR REPLACE TRIGGER t
  BEFORE
    INSERT OR
    UPDATE OF sal, deptno OR
    DELETE
  ON emp
BEGIN
  CASE
    WHEN INSERTING THEN
      DBMS_OUTPUT.PUT_LINE('Inserting');
    WHEN UPDATING('sal') THEN
      DBMS_OUTPUT.PUT_LINE('Updating salary');
    WHEN UPDATING('deptno') THEN
      DBMS_OUTPUT.PUT_LINE('Updating department ID');
    WHEN DELETING THEN
      DBMS_OUTPUT.PUT_LINE('Deleting');
  END CASE;
END;

返回的确切错误是什么?触发器似乎对我来说很好。您是否尝试过以下步骤:顺便说一句,我认为您在案例陈述中使用了错误的列名,即“salary”和“sal”应指同一列,department_id和deptnoth应指同一列。这似乎是文档中该示例的完美副本:您需要提供一个可复制的测试用例。您的代码包含剪切粘贴错误:更新子句中的列名来自新的HR模式,而触发器是基于古老的SCOTT模式构建的。但由于这些是字符串,因此不会导致编译错误。所以,要么您的实际触发器代码与此处发布的不同,要么您的表结构与触发器建议的不同。返回的确切错误是什么?触发器似乎对我来说创建得很好。您是否尝试过以下步骤:顺便说一句,我认为您在案例陈述中使用了错误的列名,即“salary”和“sal”应指同一列,department_id和deptnoth应指同一列。这似乎是文档中该示例的完美副本:您需要提供一个可复制的测试用例。您的代码包含剪切粘贴错误:更新子句中的列名来自新的HR模式,而触发器是基于古老的SCOTT模式构建的。但由于这些是字符串,因此不会导致编译错误。所以,要么您的实际触发器代码与此处发布的不同,要么您的表的结构与触发器的建议不同。