Обновление производных столбцов Oracle с помощью соединения - PullRequest
0 голосов
/ 17 января 2019

У меня есть базовая таблица, в которой я хочу обновить 5 значений на основе значений COALESCED из различных других таблиц (производное значение). В SQL Server (TSQL) я бы сделал что-то вроде этого:

Update tab1
set col1 = COALESCE(tab2.val1,tab3.val1,tab4.val1),
col2 = COALESCE(tab2.val2,tab3.val3,tab4.val4),
col3 = COALESCE(tab2.val3,tab3.val3,tab4.val3)
from tab1
left outer join tab2 on tab1.joincol = tab2.joincol
left outer join tab3 on tab1.joincol = tab3.joincol
left outer join tab4 on tab1.joincol = tab4.joincol

Я прочитал тонны постов о том, как это сделать в Oracle, но я не могу заставить ЛЮБОЙ из них работать в вышеуказанном сценарии! Слияние не будет работать, потому что в tab1 может быть несколько строк, которые объединяются и нуждаются в обновлении на основе полученных значений. Когда я пытаюсь использовать «update (select ...) set», я получаю «ORA-01732: операция манипулирования данными недопустима в этом представлении», даже если никакие представления не используются.

Пожалуйста, помогите! В этот день я бился головой! На самом деле меня не привлекает Oracle!

1 Ответ

0 голосов
/ 17 января 2019

Как то так?

update tab1 set
  (col1, col2, col3) = 
  (select COALESCE(tab2.val1, tab3.val1, tab4.val1),
          COALESCE(tab2.val2, tab3.val3, tab4.val4),
          COALESCE(tab2.val3, tab3.val3, tab4.val3)
   from tab2 left outer join tab1 on tab1.joincol = tab2.joincol
             left outer join tab3 on tab1.joincol = tab3.joincol
             left outer join tab4 on tab1.joincol = tab4.joincol 
  );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...