java - DELETE .. RETURNING rowid 在 JOOQ 不工作

标签 java sql oracle jooq

我有一个 oracle 数据库,我试图根据客户编号删除一条记录,查询返回已删除记录的 rowid。执行查询时,出现以下异常:java.lang.IllegalArgumentException:字段 (rowid) 不包含在行中。如果我尝试返回一个不同的字段(例如 client_number 字段本身)而不是 rowid,查询将完美运行。

我尝试执行的查询如下所示:

ClientDetails clt = CLIENT_DETAILS.as("clt");

ClientDetailsRecord result = context.deleteFrom(clt)
            .where(clt.CLIENT_NUMBER.equal(clientNumber))
            .returning(rowid())
            .fetchOne();

这是 Jooq 的限制,还是我做错了?

最佳答案

这是 jOOQ 3.x 的一个已知(不幸的)限制,它只能返回表的声明列 CLIENT_DETAILS,没有像 ROWID 这样的“系统”列或与此相关的任何表达方式。纠正此问题的相关功能请求是:https://github.com/jOOQ/jOOQ/issues/5622

您可以通过创建自己的 CLIENT_DETAILS 表来解决此限制,该表包含一个“合成”ROWID 列,例如通过:

  • 扩展 CustomTable type
  • 通过将 ROWID 列添加到您的 CLIENT_DETAILS 表来扩展代码生成器(注意这可能会产生不良副作用,例如调用 UpdatableRecord.store 时())

关于java - DELETE .. RETURNING rowid 在 JOOQ 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43249129/

相关文章:

sql - 如何在 SSIS 中截断多个表(使用 ADO.NET 目标和 Oracle 数据库)

sql - 如何设置 NLS_DATE_FORMAT | ZF2 与 oci8 |甲骨文 12

java - Oracle - 更新记录并在同一查询中返回更新日期

Oracle 选择 NCLOB 类似于某个字符串的位置

java - 将 OpenCV 转换为 JavaCV - 在函数 cvHoughLines2() 中需要帮助

mysql - 集合的交集

sql - 将表字段更改为 UNIQUE

java - 将 if else 语句压缩成更短更优雅的代码

java - Liferay/Java 通过 ADFS 自定义登录

java - 检查哪个日期先出现?