2012-03-24 62 views
0

我正在写一个更新查询,它给了我错误,我想要做的就是将一个值乘以它添加到另一个值。更新声明错误,括号,验证失败ORACLE

声明原文

下面的语句完美的作品,

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); 

改良版不工作 这是修改后的版本,我想乘前两个选择与价值每个领域的飞行和打架席位号码。

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); 
+2

这些是DML语句,而不是触发器。 – 2012-03-25 13:19:56

+0

是的,我忘了更新标题 – 2012-03-25 16:34:50

回答

1

NVL需要至少两个参数。但在线上的NVL只有一个。

你可能想:

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); 

下一次,请添加错误消息的问题。