2012-03-26 4 views
1

완벽하게 작동하는 다음 DML 문이 있습니다. 트리거로 만들려고했지만 작동하지 않습니다.오라클 트리거 오류, 유효하지 않은 식별자

DML 문

UPDATE HOLIDAY_RESERVATION R SET SUBTOTAL = 
    NVL((SELECT F.FLI_PRICE FROM FLIGHT F WHERE F.FLI_ID = R.IN_FLIGHT_ID), 0) * NVL(R.IN_FLIGHT_SEATS_NO,0) + 
    NVL((SELECT F.FLI_PRICE FROM FLIGHT F WHERE F.FLI_ID = R.OUT_FLIGHT_ID), 0)* NVL(R.OUT_FLIGHT_SEATS_NO,0) + 
    NVL((SELECT AC.ACC_PRICEPN FROM ACCOMMODATION AC WHERE AC.ACC_ID = R.ACC_ID), 0); 

트리거 문

CREATE OR REPLACE TRIGGER HR_SUBTOTAL 
BEFORE INSERT OR UPDATE ON HOLIDAY_RESERVATION 
FOR EACH ROW 
BEGIN 
    SELECT 
     NVL((SELECT F.FLI_PRICE FROM FLIGHT F WHERE F.FLI_ID = :NEW.IN_FLIGHT_ID), 0) * NVL(R.IN_FLIGHT_SEATS_NO,0) + 
     NVL((SELECT F.FLI_PRICE FROM FLIGHT F WHERE F.FLI_ID = :NEW.OUT_FLIGHT_ID), 0) * NVL(R.OUT_FLIGHT_SEATS_NO,0) + 
     NVL((SELECT AC.ACC_PRICEPN FROM ACCOMMODATION AC WHERE AC.ACC_ID = :NEW.ACC_ID), 0) 
     INTO :NEW.SUBTOTAL 
    FROM DUAL; 
END; 


Errors for TRIGGER HR_SUBTOTAL: 

LINE/COL ERROR 
-------- ---------------------------------------------------------------- 
2/4  PL/SQL: SQL Statement ignored 
4/92  PL/SQL: ORA-00904: "R"."OUT_FLIGHT_SEATS_NO": invalid identifier 
오류가 난 곱 비트를 제거하는 경우, 그것은 아마 작동 때문에 * 곱 비트에 있어야한다

괄호 안에 다른 선택으로 묶여 있어야합니다.

+0

트리거 코드에'R'은 무엇을 다음과 같이 SELECT 문에 OLD 옵션 : NEW 나 :

는 는

당신은 사용해야합니까? – turbanoff

+0

R은 별칭입니다. –

+0

별칭은 무엇입니까? – turbanoff

답변

2

쿼리에 R의 별칭 집합이 없습니다.

SELECT 
    NVL((SELECT F.FLI_PRICE FROM FLIGHT F WHERE F.FLI_ID = :NEW.IN_FLIGHT_ID), 0) * NVL(:OLD.IN_FLIGHT_SEATS_NO,0) + 
    NVL((SELECT F.FLI_PRICE FROM FLIGHT F WHERE F.FLI_ID = :NEW.OUT_FLIGHT_ID), 0) * NVL(:OLD.OUT_FLIGHT_SEATS_NO,0) + 
    NVL((SELECT AC.ACC_PRICEPN FROM ACCOMMODATION AC WHERE AC.ACC_ID = :NEW.ACC_ID), 0) 
    INTO :NEW.SUBTOTAL 
FROM DUAL; 
+0

덕분에 많이 동등한 것입니다 : –

+1

대단히 환영합니다! – GuZzie

관련 문제