我有以下DML語句完美工作,我試圖使它成爲觸發器,但它不工作。Oracle觸發器錯誤,無效標識符
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
誤差必須在*乘以位,因爲如果我擺脫乘以一點,它的工作原理也許它必須用括號括起來或用另一個選擇的東西括起來。
是什麼'R'在觸發代碼? – turbanoff 2012-03-26 09:16:35
R只是一個別名 – 2012-03-26 09:18:05
別名爲什麼? – turbanoff 2012-03-26 09:18:24