Вам нужно взглянуть на Возможность обновления с возможностью объединения в Oracle - это как раз ваш вариант использования.
Сначала объедините все таблицы в подзапросе (это будет эффективно выполнено с помощью хеш-объединения без медленных циклов строк за строкой).
Чем UPDATE
подзапрос
Пример
create table a
(col1 number,
col2 number);
create table b
(col2 number,
col3 number);
create table c
(col3 number,
col4 number);
insert into a values(null,1);
insert into b values(1,2);
insert into c values(2,1);
update (
select a.col1, c.col4
from a
join b on a.col2 = b.col2
join c on b.col3 = c.col3
)
set col1 = col4
;
Обратите внимание, что UJV имеет некоторые предварительные условия. Если пропустить это приводит к
ORA-01779: невозможно изменить столбец, который сопоставляется с таблицей без сохранения ключа
В вашем случае вы должны подкрепить таблицу B
и C
уникальным индексом, чтобы гарантировать представление сохранения ключа
create unique index c_idx on c(col3);
create unique index b_idx on b(col2);
Если это невозможно сделать с вашими производительными таблицами, просто используйте временную таблицу и создайте для нее уникальный индекс, обновленное представление будет проще объединить только две таблицы.