【问题标题】:Basic Oracle Trigger audit table基本 Oracle 触发器审计表
【发布时间】:2013-11-16 15:15:35
【问题描述】:

我遇到了这个错误,不知道如何解决这个错误。所以请帮助我。

错误(8,11): PL/SQL: SQL 语句被忽略

错误(10,26):PL/SQL:ORA-00904:“NEWRETAILPRICE”:标识符无效

错误(17,8):PL/SQL:SQL 语句被忽略

错误(19,57):PL/SQL:ORA-00904:“NEWRETAILPRICE”:标识符无效

错误(25,6):PL/SQL:SQL 语句被忽略

错误(27,26):PL/SQL:ORA-00904:“OLDRETAILPRICE”:标识符无效

我的代码是

CREATE OR REPLACE TRIGGER product_audit
    BEFORE INSERT OR DELETE OR UPDATE ON DD_Products
    FOR EACH ROW
  DECLARE
       Var_ChangeType CHAR(1);

  BEGIN

    IF INSERTING THEN
          VAR_ChangeType := 'I';
          INSERT INTO DD_PriceChange
          (PriceChangeNo, Change_Type, ChangeBy, ChangeDate, 
         NewProductPrice,NewRetailPrice)
         VALUES (ProductHistory_SEQ.NEXTVAL, VAR_ChangeType, USER, SYSDATE,
            :NEW.ProductPrice,  :NEW.RetailPrice);

      ELSIF UPDATING THEN
      VAR_ChangeType := 'U';

       INSERT INTO DD_PriceChange
     (PriceChangeNo, Change_Type, ChangeBy, ChangeDate, 
         OldProductPrice,OldRetailPrice,NewProductPrice,NewRetailPrice)
   VALUES (ProductHistory_SEQ.NEXTVAL, VAR_ChangeType, USER, SYSDATE,
           :OLD.ProductPrice,  :OLD.RetailPrice,:NEW.ProductPrice,  :NEW.RetailPrice);

        ELSE
         VAR_ChangeType := 'D';
     INSERT INTO DD_PriceChange
    (PriceChangeNo, Change_Type, ChangeBy, ChangeDate, 
         OldProductPrice,OldRetailPrice)
   VALUES (ProductHistory_SEQ.NEXTVAL, VAR_ChangeType, USER, SYSDATE,
           :OLD.ProductPrice,  :OLD.RetailPrice);
    END IF;

  END; 
  /

我创建了一个这样的表

 Create table DD_PriceChange
 (
      PriceChangeNo NUMBER(5) PRIMARY KEY, 
      Change_Type CHAR(1), 
      ChangeBy VARCHAR2(20),
      ChangeDate DATE, 
      OldProductPrice NUMBER(5),
      NewProductPrice NUMBER(5),
      OldRetailPrice NUMBER(5),
      NewRetailPrice NUMBER(5)
 );

CREATE SEQUENCE ProductHistory_SEQ;

请问有谁知道我为什么会收到这个错误。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    不知道您为什么会收到错误,但我剥离了所有内容并从基础重新构建触发器并使其正常工作:

    CREATE OR REPLACE TRIGGER product_audit
      BEFORE INSERT OR DELETE OR UPDATE ON DD_Products
      FOR EACH ROW
    DECLARE
      VAR_ChangeType CHAR(1);
    BEGIN
      IF INSERTING   THEN VAR_ChangeType := 'I';
      ELSIF UPDATING THEN VAR_ChangeType := 'U';
      ELSE                VAR_ChangeType := 'D';
      END IF;
      INSERT INTO DD_PriceChange
      (
        PriceChangeNo,
        Change_Type,
        ChangeBy,
        ChangeDate, 
        NewProductPrice,
        NewRetailPrice, 
        OldProductPrice,
        OldRetailPrice
      ) VALUES (
        ProductHistory_SEQ.NEXTVAL,
        VAR_ChangeType,
        USER,
        SYSDATE,
        :NEW.ProductPrice,
        :NEW.RetailPrice,
        :OLD.ProductPrice,
        :OLD.RetailPrice
      );
    END product_audit;
    /
    

    SQLFIDDLE

    【讨论】:

      猜你喜欢
      • 2018-10-24
      • 2014-04-19
      • 2020-01-08
      • 2020-04-18
      • 2018-11-03
      • 2021-06-05
      • 1970-01-01
      相关资源
      最近更新 更多