Необходимо обновить столбец на основе входящего значения в oracle - PullRequest
1 голос
/ 27 апреля 2020

Как я могу достичь ниже сценария? У меня есть структура таблицы ниже:

 ----------------------------
| ID | COL_1 | COL_2 | COL_3 |
 ----------------------------

У меня есть сценарий, в котором мне нужно обновить приведенную выше таблицу примерно так:

Update <table_name>
set decode (FILE_TYPE,'ABC',COL_1,
                      'CDE',COL_2,
                      'EFG',COL_3) = 'Y'
where ID = 12345;

Обратите внимание, что столбец FILE_TYPE вытекает из вышестоящего задания. Как выбрать имя столбца на бегу? Пожалуйста помоги. Спасибо!

1 Ответ

0 голосов
/ 27 апреля 2020

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

update mytable
set 
    col_1 = decode(file_type, 'ABC', 'Y', col_1),
    col_2 = decode(file_type, 'CDE', 'Y', col_2),
    col_3 = decode(file_type, 'EFG', 'Y', col_3)
where id = 12345

Обновляется только тот столбец, где параметр соответствует целевому значению, в противном случае исходное значение переназначен (так что это не работает).

Может быть проще следовать с помощью case выражений:

update mytable
set 
    col_1 = case when file_type = 'ABC' then 'Y' else col_1 end,
    col_2 = case when file_type = 'CDE' then 'Y' else col_1 end,
    col_3 = case when file_type = 'EFG' then 'Y' else col_1 end,
where id = 12345
...