我有一个 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/