使用 Oracle 11g 的 JOOQ 批量更新日期

JOOQ batch update dates with Oracle 11g

当我尝试使用 Jooq 3.9.0 批量更新 Oracle 11g table 中的字段时,我遇到了与日期相关的异常:

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();

该字段在 table 中具有 TIMESTAMP(3) 类型。 到目前为止,我已经尝试进行非批量更新,例如:

updates.forEach(Query::execute);

这可行,但除非绝对必要,否则我不会牺牲性能。

还尝试在 Jooq 的配置中添加类型绑定,将日期字段包装在 to_timestamp(<Val>, “pattern”) 调用中,这也有效,但它似乎很脆弱,已经引发了 NLS 问题并且看起来很丑陋。很高兴弄清楚为什么批量更新与常规更新的行为不同。

我想你 运行 在这里讨论这个问题:#2738, which is fixed for 3.10 and will be integrated in 3.9.2

由于您使用 batch(Collection) API 的批量更新用于静态语句批处理,因此需要内联绑定变量,这在 Java 时间内无法正常工作API 在 jOOQ 3.9.1 中输入