【发布时间】:2017-07-09 13:37:35
【问题描述】:
当我尝试使用 Jooq 3.9.0 批量更新 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 问题,而且看起来很难看。想知道为什么批量更新的行为与常规更新不同。
【问题讨论】:
-
能看到日志中生成的SQL吗? (注意我也为此打开了一个问题:github.com/jOOQ/jOOQ/issues/5910)