У меня есть немного уникальное требование к API Java-JDBC вместе с Oracle Database. У меня autoCommit по умолчанию, что верно для Oracle, и я использую пример, подобный этой ссылка .
Однако, когда я добавляю, скажем, 1000 пакетов, и скажем, что каждая из них является вставкой. И давайте предположим, что около 20 записей нарушили некоторые ограничения, я хочу, чтобы оставшиеся 980 перешли в COMMITTED (и впредь были видимы для любых других запросов, использующих любое другое соединение) в базу данных и проигнорировали 20 записей. В приведенном выше примере, когда одна строка нарушает какую-либо транзакцию, тогда , даже когда я фиксирую в блоке catch, транзакция фиксируется только до первого сбоя .
Я знаю, что пакетные обновления должны выполняться ТОЛЬКО тогда, когда вы уверены, что все строки пройдут, а обработка исключений не одна, но я планирую ПАТЧИРОВАТЬ существующую базу данных, так что какие-то "плохие практики" в порядке :) Любой примеры кода будут высоко оценены.
**** БОЛЬШЕ ДЕТАЛЕЙ ****
Использовать Простую вставку / обновление нехорошо, так как я обрабатываю около 3M строк, поэтому я собираю каждую 1000 записей. Простое добавление 1000 вставок в цикле (без учета исключений) занимает намного больше времени (около 5 секунд для каждых 1000 записей), в отличие от пакетного обновления <300 мс. </p>
Проблема:
С базой данных Oracle драйвер, по-видимому, останавливается при первом сбое, то есть, когда 1000 строк упакованы, а 100-я вышла из строя, я хочу, чтобы он продолжался до 1000-й строки. Я думаю, что это не может быть сделано в JDBC (с Oracle) Как ссылка указывает, что только несколько баз данных поддерживают такую функцию, и, вероятно, Oracle не один