Можно ли обновить несколько столбцов в одном запросе на обновление? - PullRequest
0 голосов
/ 29 марта 2019

Эй, я работаю над логикой в ​​Oracle, в которой у меня есть процедура, которая вставляет некоторые данные в таблицу. Но опять же мне нужно выполнить некоторые операции со столбцами, я знаю, что мы можем добиться этого с помощью курсора, но это повлияет на время выполнения процедуры.

Просто хотел узнать, будет ли работать одно обновление для этого сценария.

----- что-то в этом роде ----------

Update tablename 
Set column_2 = case when colum_2 = 0 then column_1 else column_2 end,
Column_3  =case when colum_3 = 0 then column_ 2 else column_ 3 end ;

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

Я не уверен, что понимаю, чего вы на самом деле хотите, но UPDATE может обновить значение более чем одного столбца в строке одним оператором UPDATE: ОБНОВЛЕНИЕ table_name set col01 =, col02 = и т. Д. ГДЕ

0 голосов
/ 29 марта 2019

Я не могу сказать, будет ли это "работать", потому что вы не сказали, на что надеетесь, будут результаты.

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

Так, например,

Set column_2 = case when colum_2 = 0 then column_1 else column_2 end,
    Column_3  =case when colum_3 = 0 then column_ 2 else column_ 3 end 

... никогда не заставит Column_3 получить значение, которое изначально было в Column_1, чего можно бояться, если оба значения Column_2 и Column_3 изначально равны нулю.

Этого не произойдет.Если оба значения Column_2 и Column_3 изначально равны нулю, для Column_2 будет установлено исходное значение Column_1, а для Column_3 будет установлено исходное значение Column_2 (которое мы 'мы уже говорили, что было ноль).

Если, когда оба столбца равны нулю, вы хотите, чтобы оба столбца получили значение Column_1, вам нужно было бы написать его так:

SET column_2 = case when column_2 = 0 then column_1 else column_2 end,
    column_3 = case when column_3 = 0 
                  then 
                     case when column_2 = 0 THEN column_1 ELSE column_2 end
                  else 
                     column_3 end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...