Мне нужно сделать массовое обновление таблицы (~ 30 000 записей) в базе данных Oracle 10g. Проблема в том, что нет предложения «где», которое может выбирать целевые строки. Однако каждую целевую строку можно идентифицировать с помощью сложного ключа. Улов здесь заключается в том, что список составных ключей находится из внешнего источника (а не в базе данных).Лучший подход для массового обновления базы данных Oracle
В настоящее время у меня есть программа Java, которая перебирает список составных ключей и выплевывает процедуру PL/SQL, который по сути просто куча повторных update
заявлений подобного следующему:
update table1 t set myfield='Updated' where t.comp_key1='12345' and t.comp_key2='98765';
Есть лучший способ сделать это, или это «достаточно хорошо», учитывая, что мы имеем дело только с ~ 30 тыс. записей?
Вы можете сделать связку за раз, используя что-то вроде '... где (t.comp_key1, t.comp_key2) в (('12345', '98765'), ('11111', '11111'), ('22222', '22222')) '. Количество строк, которые вы можете обновить, будет зависеть от максимальной длины для оператора (который будет определен вашим драйвером данных Java), но вы должны иметь возможность получать 100 или более строк для каждого оператора. Это некрасиво, но вы бы сэкономили много поездок в оба конца. –
Альтернативно вы можете проанализировать весь лот в базе данных и использовать функцию [table] (http://blog.lishman.com/2008/05/oracle-table-functions.html). – Ben