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 放入其中。

所有其他列也是如此。