moropsk
@moropsk

Возможно ли обновить данные в таблице частями?

Приветствую!
Подскажите пож. нужно выполнить обновление полей("comments", "receipt", "date") в таблице(test_p ) из таблицы(ORG_P ) частями (примерно по 100 000 уникальных записей) т.к. в таблице(ORG_P ) более 3 млн.записей.

Т.е
1ый-раз обновляем 100к записей,
2ой-раз обновляем другие 100к не входящие в 1ый-раз

Есть пример, но он обновляет все записи по max("record_id") .

declare
  v_count_rows number := 2; --кол-во обновляемых записей
  v_maxid   number; 
  v_id      number := 0; - начальное значение
begin
  select max("record_id") into v_maxid from test_p;
  while v_id < v_maxid loop

    update test_p t1
       set ("comments", "receipt", "date") =
           (select t2."comments", t2."receipt", t2."period_date"
              from org_p t2
             where "record_id" between v_id and
                   least(v_maxid, v_id + v_count_rows)
               and t1."record_id" = t2."record_id")

--пров-ка на существование     
where exists (select 1
              from ORG_P t2
             where "record_id" between v_id and
                   least(v_maxid, v_id + v_count_rows)
               and t1."record_id" = t2."record_id");             

    v_id := v_id + v_count_rows;    
  end loop;  
  commit;  
end;
  • Вопрос задан
  • 628 просмотров
Решения вопроса 1
Vapaamies
@Vapaamies
В творческом кризисе
Что-то какой-то у вас запрос странный. Я бы посоветовал переписать его на merge и вообще избавиться от блока PL/SQL.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы