基本Oracle Trigger审计表

时间:2013-11-16 15:15:35

标签: sql oracle

我遇到此错误,不知道如何修复错误。请帮助我。

错误(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;

有人知道我为什么会收到这个错误。

1 个答案:

答案 0 :(得分: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

相关问题