Мне нужно запустить несколько относительно простых операторов SQL-обновления, чтобы обновить один столбец в таблице Oracle с 14,4 миллионами строк. Один оператор выполняет функцию, написанную на Java, и JVM исчерпывает память, поскольку я делаю обновление на всех 14.4 миллиона строк.Запуск операторов обновления Oracle в пакетном режиме
Вы написали своего рода пакетную PL/SQL-процедуру, которая может разбить это простое обновление на множество, скажем, 10K записей за партию? Я знаю, что если я смогу перенести свои обновления после множества записей, это будет намного быстрее, и у меня не будет нехватки памяти. Я уверен, что есть простой способ сделать это, используя FOR loop
и row_num
, но я не добился большого прогресса.
Вот два заявления, мне нужно работать для каждой партии п записей:
первый:
update vr_location l set l.usps_address=(
select mylib.string_utils.remove_duplicate_whitespace(
house_number || ' ' || pre_street_direction || ' ' || street_name || ' ' ||
street_description || ' ' || post_street_direction)
from vr_address a where a.address_pk=l.address_pk);
второй:
update vr_location set usps_address = mylib.usaddress_utils.parse_address(usps_address);
Если бы мы могли видеть столбцы в vr_location, мы можем быть в состоянии предложить что-то. –
Столбцы в VR_LOCATION включают столбец zip_co, который является FK обратно в таблицу zip_code. Я собираюсь взять совет stili и использовать его, чтобы получить подмножества данных. Речь идет не о попытке сделать все в одном наборе, а о том, как заставить JVM обрабатывать 20-30K строк одновременно без сбоев. – Dylan