В Oracle SQL (версия 12 c) есть ли способ выполнить обновление для нескольких столбцов, ссылающихся друг на друга? Предполагая, что у меня есть следующая таблица с именем test_tb :
|pk |col1|col2|
----------------
|1 |4 |1 |
|2 |9 |2 |
|3 |7 |9 |
Я намереваюсь добиться следующего результата:
|pk |col1|col2|
----------------
|1 |5 |6 |
|2 |10 |12 |
|3 |8 |17 |
Первой настройкой
col1 = col1 + 1
, за которым следует
col2 = col2 + col1
Насколько я знаю, я могу сделать это:
update test_tb set col1 = col1 + 1, col2 = col2 + col1 + 1
Однако, при выполнении более сложных операций это станет большим обслуживанием. Другой вариант:
merge into test_tb desc
using (
with tmp as (
select pk,
col1 + 1 as col1,
col2
from test_tb
)
select pk,
col1,
col2 + col1 as col2
) src
on (dest.pk = src.pk)
when matched then update set
dest.col1 = src.col1,
dest.col2 = src.col1;
При большом количестве данных (в моей таблице ~ 10 млн. Строк) это не является оптимальным вариантом.
Есть ли способ избежать напишите код, в результате которого дважды появится «col1» и в то же время получите хорошую производительность?