избежать ошибки пакетной вставки jdbc, если в оракуле не удалось вставить одну запись - PullRequest
0 голосов
/ 26 сентября 2018

Драйвер JDBC Oracle выдает исключение BatchUpdateException, если в середине пакета возникает ошибка.Использование NamedParameterJdbcDaoSupport для вставки данных, как показано ниже

getJdbcTemplate().batchUpdate(query, dataList, 1000,
  new ParameterizedPreparedStatementSetter<MyObject>() {
     @Override
     public void setValues(final PreparedStatement ps, final MyObject bucket) throws SQLException {
       ps.setString(1, bucket.getInit());
       ps.setString(2, bucket.getNbr());                  
    }
});

Я работаю в BatchUpdateException из-за ограничения уникального ключа, мы обрабатываем миллионы записей, поэтому мы не можем перейти в базу данных для проверки уникального ключа.

В любом случае пакетная вставка не завершится с ошибкой, если одна запись не удалась.

1 Ответ

0 голосов
/ 26 сентября 2018

Вы хотите использовать подсказку IGNORE_ROW_ON_DUPKEY_INDEX .добавьте комментарий после вставки, например:

insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(table_name, unique_index_name) */
       (...)

Но если вы вставляете миллион строк таким образом, вам, вероятно, будет лучше использовать sqlldr.

...