ORACLE - 合并语句,当匹配和命运值为空时更新
ORACLE - Merge statement, update when match and destiny values are null
我有一个合并语句,当 destination table 在这些列中有空值时,我需要更新几个列。
如果 destination 中的 x 列为 null,则仅更新该列。如果 destination 中只有 2 列为空,则仅更新这两列。
如何验证每一列是否更新,检查命运是否为空?
MERGE INTO all_weather_mv p
USING (SELECT
a.ACTUAL_DRY_BULB_TEMP_F
,a.ACTUAL_DEW_POINT_F
,a.ACTUAL_WIND_SPEED_MPH
,a.ACTUAL_RELATIVE_HUMIDITY_PCT
,a.ACTUAL_STATION_PRESSURE_IN
,a.ACTUAL_HOURLY_PRECIP_IN
,a.OBJECTID
,a.DATETIME_UTC
FROM gtt_all_weather_mv a
,wx_stations w
WHERE w.OBJECTID = a.OBJECTID
AND w.WX_PREFERENCE = 1) d
ON (p.OBJECTID = d.OBJECTID
AND p.DATETIME_UTC = d.DATETIME_UTC
)
WHEN MATCHED THEN
UPDATE SET p.ACTUAL_DRY_BULB_TEMP_F=d.ACTUAL_DRY_BULB_TEMP_F,
p.ACTUAL_DEW_POINT_F=d.ACTUAL_DEW_POINT_F,
p.ACTUAL_WIND_SPEED_MPH=d.ACTUAL_WIND_SPEED_MPH,
p.ACTUAL_RELATIVE_HUMIDITY_PCT=d.ACTUAL_RELATIVE_HUMIDITY_PCT,
p.ACTUAL_STATION_PRESSURE_IN=d.ACTUAL_STATION_PRESSURE_IN,
p.ACTUAL_HOURLY_PRECIP_IN=d.ACTUAL_HOURLY_PRECIP_IN
WHEN NOT MATCHED
THEN
INSERT (
OBJECTID,
DATETIME_UTC,
ACTUAL_DRY_BULB_TEMP_F,
ACTUAL_DEW_POINT_F,
ACTUAL_WIND_SPEED_MPH,
ACTUAL_RELATIVE_HUMIDITY_PCT,
ACTUAL_STATION_PRESSURE_IN,
ACTUAL_HOURLY_PRECIP_IN
)
VALUES ( d.OBJECTID,
d.DATETIME_UTC,
d.ACTUAL_DRY_BULB_TEMP_F,
d.ACTUAL_DEW_POINT_F,
d.ACTUAL_WIND_SPEED_MPH,
d.ACTUAL_RELATIVE_HUMIDITY_PCT,
d.ACTUAL_STATION_PRESSURE_IN,
d.ACTUAL_HOURLY_PRECIP_IN
)
此致
使用NVL
函数,例如
WHEN MATCHED THEN
UPDATE SET p.ACTUAL_DRY_BULB_TEMP_F = nvl(p.ACTUAL_DRY_BULB_TEMP_F, d.ACTUAL_DRY_BULB_TEMP_F),
表示:如果 p.ACTUAL_DRY_BULB_TEMP_F
为空(即 NULL
),则将 d.ACTUAL_DRY_BULB_TEMP_F
放入其中。
所有其他列也是如此。
我有一个合并语句,当 destination table 在这些列中有空值时,我需要更新几个列。 如果 destination 中的 x 列为 null,则仅更新该列。如果 destination 中只有 2 列为空,则仅更新这两列。 如何验证每一列是否更新,检查命运是否为空?
MERGE INTO all_weather_mv p
USING (SELECT
a.ACTUAL_DRY_BULB_TEMP_F
,a.ACTUAL_DEW_POINT_F
,a.ACTUAL_WIND_SPEED_MPH
,a.ACTUAL_RELATIVE_HUMIDITY_PCT
,a.ACTUAL_STATION_PRESSURE_IN
,a.ACTUAL_HOURLY_PRECIP_IN
,a.OBJECTID
,a.DATETIME_UTC
FROM gtt_all_weather_mv a
,wx_stations w
WHERE w.OBJECTID = a.OBJECTID
AND w.WX_PREFERENCE = 1) d
ON (p.OBJECTID = d.OBJECTID
AND p.DATETIME_UTC = d.DATETIME_UTC
)
WHEN MATCHED THEN
UPDATE SET p.ACTUAL_DRY_BULB_TEMP_F=d.ACTUAL_DRY_BULB_TEMP_F,
p.ACTUAL_DEW_POINT_F=d.ACTUAL_DEW_POINT_F,
p.ACTUAL_WIND_SPEED_MPH=d.ACTUAL_WIND_SPEED_MPH,
p.ACTUAL_RELATIVE_HUMIDITY_PCT=d.ACTUAL_RELATIVE_HUMIDITY_PCT,
p.ACTUAL_STATION_PRESSURE_IN=d.ACTUAL_STATION_PRESSURE_IN,
p.ACTUAL_HOURLY_PRECIP_IN=d.ACTUAL_HOURLY_PRECIP_IN
WHEN NOT MATCHED
THEN
INSERT (
OBJECTID,
DATETIME_UTC,
ACTUAL_DRY_BULB_TEMP_F,
ACTUAL_DEW_POINT_F,
ACTUAL_WIND_SPEED_MPH,
ACTUAL_RELATIVE_HUMIDITY_PCT,
ACTUAL_STATION_PRESSURE_IN,
ACTUAL_HOURLY_PRECIP_IN
)
VALUES ( d.OBJECTID,
d.DATETIME_UTC,
d.ACTUAL_DRY_BULB_TEMP_F,
d.ACTUAL_DEW_POINT_F,
d.ACTUAL_WIND_SPEED_MPH,
d.ACTUAL_RELATIVE_HUMIDITY_PCT,
d.ACTUAL_STATION_PRESSURE_IN,
d.ACTUAL_HOURLY_PRECIP_IN
)
此致
使用NVL
函数,例如
WHEN MATCHED THEN
UPDATE SET p.ACTUAL_DRY_BULB_TEMP_F = nvl(p.ACTUAL_DRY_BULB_TEMP_F, d.ACTUAL_DRY_BULB_TEMP_F),
表示:如果 p.ACTUAL_DRY_BULB_TEMP_F
为空(即 NULL
),则将 d.ACTUAL_DRY_BULB_TEMP_F
放入其中。
所有其他列也是如此。