Я предположил, что вы обновляете таблицы a и b значениями из c.
Это PL / SQL
create or replace procedure update_one_scan as
cursor c is
select a.rowid r1, b.rowid r1, c.value_to_get
from a join b on (join conditions)
join c on (join conditions)
where conditions;
begin
for r in c
loop
update a set col_to_update=r.value_to_get where rowid=r1;
update b set col_to_update=r.value_to_get where rowid=r2;
end loop;
end;
У вас есть преимущество однократного сканирования исходных таблиц.
UPDATE:
Вы можете сделать это даже в Oracle SQL, но это более ограничительно (вы увидите, когда попробуете). Но это может быть быстрее.
Является оператором UPDATE SELECT:
Create or replace Procedure update_select AS
BEGIN
update
(select a.col_to_update as c1, b.col_to_update as c2, c.value_to_get v1
from a join b on (join conditions)
join c on (join conditions)
where conditions)
set
c1 = v1, c2 = v2;
END;