2013-11-16 3 views
0

У меня возникла эта ошибка и я не знаю, как исправить ошибку. Пожалуйста, помогите мне.Базовая таблица аудита Oracle Trigger

Ошибка (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 Statement игнорируется

Ошибка (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

не знаю, почему вы получали ошибку, но я раздели все назад и перестраивается на спусковой крючок от основы и получил эту работу:

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

Смежные вопросы