2017-02-20 7 views
1

В то время как я пытаюсь партии обновить поле в таблице 11g Oracle с Jooq 3.9.0, и я получаю, связанные с даты исключения:JOOQ даты пакетного обновления с Oracle 11g

org.jooq.exception.DataAccessException: SQL [null]; error occurred during batching: ORA-01843: not a valid month 

Мы используя Java 8 типов времени (javaTimeTypes = true). Псевдокод:

List<Query> updates = singletonList(
     jooq.update(TABLE).set(TABLE.FIELD, LocalDateTime.now())); 
jooq.batch(updates).execute(); 

Поле содержит TIMESTAMP (3) в таблице. До сих пор я пытался делать обновления без партии, например .:

updates.forEach(Query::execute); 

это работает, но я бы не принести в жертву производительности, если это не абсолютно необходимо.

Также попытался добавить привязку типа в конфигурацию Jooq, которая обертывает поля даты в вызове to_timestamp(<Val>, “pattern”), который также работал, но он кажется хрупким, уже поднял проблемы с NLS и выглядит уродливым. Было бы неплохо выяснить, почему пакетные обновления ведут себя по-другому по сравнению с обычными.

+0

Вы можете увидеть SQL, сгенерированный в журнале? (примечание: Я также открыл для этого проблему: https://github.com/jOOQ/jOOQ/issues/5910) –

ответ

1

Я думаю, вы столкнулись с этой проблемой здесь: #2738, которая исправлена ​​для 3.10 и будет интегрирована in 3.9.2.

Поскольку вы используете обновления пакетной обработки с batch(Collection) API для статических партий заявление, переменные связывания должны быть встраиваемыми, который не работает правильно для типов времени API Java в jOOQ 3.9.1

+0

Да, это проблема, с которой мы сталкиваемся, спасибо за отзыв - извините за задержку. –