2016-06-07 5 views
0

유효하지 않은 식별자 :오라클 트리거 : PL/SQL : ORA-00904 : "열":이 트리거를 생성

[Error Code: 4098, SQL State: 42000] ORA-04098: trigger 'My_TRIGGER' is invalid and failed re-validation 
: 나는 테이블 제품을 업데이트 할 때

CREATE or REPLACE TRIGGER My_TRIGGER 
AFTER UPDATE ON product 
REFERENCING NEW AS NEW 
OLD AS OLD 
FOR EACH ROW 
BEGIN 
    IF (:NEW.name <> :OLD.name) 
    THEN 
    INSERT INTO product_history 
    (
     ID, 
     PRODUCT_ID, 
     NAME 
    ) 
    VALUES 
    (
     seq_product.nextval, 
     :OLD.PRODUCT_ID, 
     :OLD.NAME 
    ); 
    END IF; 
END; 

,이 오류가 발생합니다 내가 할

select * from user_errors where type = 'TRIGGER' ; 

:

나는이 쿼리를 실행3210

PL/SQL: ORA-00904: "NAME": invalid identifier 

문제점을 찾을 수 없습니다. 당신이 :OLD.NAME 대신 OLD.NAME를 쓸 수 있도록

+2

'product_history'에는 실제로'name' 열이 있습니까? – Mureinik

+0

네, 그게 .... – junior

답변

1

절이

REFERENCING NEW AS NEW OLD AS OLD 

는 존재하지만 코드에서 당신은 여전히 ​​NAME이 더 이상 알려지지 않은 것이 원인이 될해야 :OLD.NAME을 쓰고있다.

나는 단순히 참조 절을 제거하고 모든 것이 잘되어야합니다.

+0

참조 절을 제거하면 PL/SQL : ORA-00904 : "NAME": 잘못된 식별자와 OLD.NAME 대신 OLD.NAME을 사용할 때 같은 오류가 발생합니다. , 나는 다음과 같이 나타납니다 : PLS-00201 : 'OLD.NAME'식별자를 선언해야합니다! – junior

+0

나는 단지주의 할 점이있다 : 코드에': NEW.name <>'이있다. 브래킷을 제거하십시오. –

+0

"PL/SQL : ORA-00904 :"NAME ": 유효하지 않은 식별자":( – junior