【问题标题】:JOOQ batch update dates with Oracle 11gOracle 11g 的 JOOQ 批量更新日期
【发布时间】: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(&lt;Val&gt;, “pattern”) 调用中,这也有效,但它似乎很脆弱,已经引发了 NLS 问题,而且看起来很难看。想知道为什么批量更新的行为与常规更新不同。

【问题讨论】:

标签: java sql oracle11g jooq


【解决方案1】:

我认为您在这里遇到了这个问题:#2738,该问题已针对 3.10 进行了修复,并将集成 in 3.9.2

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

【讨论】:

  • 是的,这就是我们面临的问题,感谢您的反馈 - 抱歉耽搁了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-24
  • 2013-12-02
  • 2012-08-03
  • 2021-09-16
  • 2020-11-02
  • 1970-01-01
  • 2012-02-01
相关资源
最近更新 更多