Oracle SQL запрос на обновление обновляет только значения, если они нулевые - PullRequest
3 голосов
/ 09 марта 2012

У меня есть следующие запросы, в которых я обновляю значения только в том случае, если они равны нулю.

Возможно ли объединить все эти значения в один запрос?

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

и

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

Ответы [ 3 ]

9 голосов
/ 09 марта 2012

Вы можете попробовать:

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

Хотя это может вызвать срабатывание триггеров обновления даже для строк, которые практически не изменились.

1 голос
/ 09 марта 2012
UPDATE test
   SET test1 = COALESCE(test1, 'hello')
     , test2 = COALESCE(test2, 'hello')
 WHERE test1 IS NULL OR test2 IS NULL

COALESCE () работает аналогично NVL () в этом случае - возвращает первое ненулевое значение.

0 голосов
/ 09 марта 2012
UPDATE test
SET Test1 = COALESCE(test1, 'hello'),
    Test2 = COALESCE(test2, 'world')
WHERE test1 IS NULL OR
      test2 IS NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...