Мне нужно установить значение в NULL после использования его, чтобы обновить другое значение - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть что-то вроде этого:

UPDATE table1 SET variable2 = variable3 WHERE variable2 IS NULL;
UPDATE table1 SET variable1 = variable2 WHERE variable1 IS NULL;

Проблема, с которой я сталкиваюсь, заключается в том, что, когда я изменяю переменную для примера2 со значением переменной3, я хочу, чтобы переменная3 была в виде NULL.

IЯ думаю, что у нас есть Oracle 12, и я думаю, что в теории что-то подобное должно работать:

UPDATE table1 SET variable2 = variable3, variable3 = NULL WHERE variable2 IS NULL;

Но наш администратор БД не хочет, чтобы мы это использовали ....

Есть идеи?

Спасибо!

1 Ответ

1 голос
/ 30 сентября 2019

Как сказал Boneist в комментарии, крайне маловероятно, что Oracle изменит оператор UPDATE на таком фундаментальном уровне, чтобы ваш UPDATE не работал.

Более того, нельзя даже думать таким образом. Поскольку никто на самом деле не знает, какими будут / могут быть изменения, ЛУЧШАЯ (и единственная) вещь, безусловно, состоит в том, чтобы продолжать развиваться так, как это лучше всего в текущей версии.

Ваш UPDATE хорош.

Единственное добавление, которое я хотел бы сделать, это проверить, действительно ли столбец, из которого вы копируете, имеет какое-либо значение. Это позволит избежать «обновления» строк, в которых нечего обновлять (и, возможно, испортить столбцы аудита с помощью триггеров, если они реализованы):

UPDATE table1 
   SET variable2 = variable3 
     , variable3 = NULL
 WHERE variable2 IS NULL
   AND variable3 IS NOT NULL;

UPDATE table1 
   SET variable1 = variable2 
     , variable2 = NULL
 WHERE variable1 IS NULL
   AND variable2 IS NOT NULL;
...