Oracle SQL更新查询仅在值为null时更新值

时间:2012-03-09 11:35:54

标签: sql oracle

我有以下查询,只有在值为null时才更新值。

是否可以将所有这些放入一个查询中?

UPDATE test
SET test1 = 'hello'
WHERE test1 IS NULL

UPDATE test
SET test2 = 'world'
WHERE test2 IS NULL

3 个答案:

答案 0 :(得分:9)

你可以尝试:

UPDATE test
   SET test1 = NVL(test1, 'hello'),
       test2 = NVL(test2, 'world')
 WHERE test2 IS NULL
    OR test1 IS NULL;

虽然它可能会触发更新触发器,即使对于实际未更改的行也是如此。

答案 1 :(得分:1)

UPDATE test
   SET test1 = COALESCE(test1, 'hello')
     , test2 = COALESCE(test2, 'hello')
 WHERE test1 IS NULL OR test2 IS NULL

COALESCE()在这种情况下与NVL()类似 - 返回第一个非空值。

答案 2 :(得分:0)

UPDATE test
SET Test1 = COALESCE(test1, 'hello'),
    Test2 = COALESCE(test2, 'world')
WHERE test1 IS NULL OR
      test2 IS NULL