Задать вопрос
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;
  • Вопрос задан
  • 855 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
Vapaamies
@Vapaamies
Психанул и снес свои ответы не отмечающим решения…
Что-то какой-то у вас запрос странный. Я бы посоветовал переписать его на merge и вообще избавиться от блока PL/SQL.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
chlp
@chlp
фулстек
Может OFFSET? Пример из www.dba-oracle.com/t_offset_fet_first_rows_only.htm:

select 
   ename 
from 
   emp 
order by ename 
offset 5 rows 
fetch next 5 rows only;
Ответ написан
Комментировать
Lorien_Elf
@Lorien_Elf
Keep calm and drop database
В oracle обычно используют псевдостолбец rownum.
www.gokhanatil.com/2008/10/how-to-limit-the-number...
Ответ написан
Комментировать
@entermix
Используйте LIMIT в SQL запросе www.spravkaweb.ru/mysql/sql/update
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы