Dav*_*cia 2 oracle aggregate oracle-11g-r2
我希望将两个不同表中的两个值用作第三个表中的总计。
例如:
accommodation
和flight
acc_price
用价值从增加价值flight_price
subtotal
我尝试过的事情;
SELECT F.FLI_PRICE + AC.ACC_PRICEPN
INTO R.SUBTOTAL
FROM HOLIDAY_RESERVATION R, FLIGHT F, ACCOMMODATION AC;
Run Code Online (Sandbox Code Playgroud)
更新
我希望将 Leigh 的代码添加到触发器中,我尝试了以下操作,但出现了突变错误
CREATE OR REPLACE TRIGGER HR_SUBTOTAL
AFTER DELETE OR INSERT OR UPDATE ON HOLIDAY_RESERVATION
FOR EACH ROW
BEGIN
UPDATE HOLIDAY_RESERVATION R SET SUBTOTAL =
NVL((SELECT F.FLI_PRICE FROM FLIGHT F WHERE F.FLI_ID = R.IN_FLIGHT_ID), 0) +
NVL((SELECT F.FLI_PRICE FROM FLIGHT F WHERE F.FLI_ID = R.OUT_FLIGHT_ID), 0) +
NVL((SELECT AC.ACC_PRICEPN FROM ACCOMMODATION AC WHERE AC.ACC_ID = R.ACC_ID), 0);
END;
/
ERROR at line 1:
ORA-04091: table LATIN.HOLIDAY_RESERVATION is mutating, trigger/f
ORA-06512: at "LATIN.HR_SUBTOTAL", line 2
ORA-04088: error during execution of trigger 'LATIN.HR_SUBTOTAL'
Run Code Online (Sandbox Code Playgroud)
要使用其他表中可能具有空值的值的总和来更新列,请执行以下操作:
UPDATE Holiday_Reservation R SET Subtotal =
NVL((SELECT F.Fli_Price FROM Flight F WHERE F.Fli_ID = R.In_Flight_ID), 0) +
NVL((SELECT F.Fli_Price FROM Flight F WHERE F.Fli_ID = R.Out_Flight_ID), 0) +
NVL((SELECT AC.Acc_PricePn FROM Accommodation AC WHERE AC.Acc_ID = R.Acc_ID), 0);
Run Code Online (Sandbox Code Playgroud)
在触发器中,这看起来像这样:
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((SELECT F.Fli_Price FROM Flight F WHERE F.Fli_ID = :new.Out_Flight_ID), 0) +
NVL((SELECT AC.Acc_PricePn FROM Accomodation AC WHERE AC.Acc_ID = :new.Acc_ID), 0)
INTO :new.Subtotal
FROM dual;
END;
/
Run Code Online (Sandbox Code Playgroud)