我有一个oracle数据库,并试图删除基于客户端号码的记录,查询返回已删除记录的rowid。执行查询时,出现以下异常:java.lang.IllegalArgumentException:Field(rowid)未包含在Row中。如果我尝试返回一个不同的字段(如client_number字段本身)而不是rowid,则查询完美工作。DELETE ..返回rowid在JOOQ不起作用
查询我想执行这个样子的:
ClientDetails clt = CLIENT_DETAILS.as("clt");
ClientDetailsRecord result = context.deleteFrom(clt)
.where(clt.CLIENT_NUMBER.equal(clientNumber))
.returning(rowid())
.fetchOne();
这是Jooq的限制,还是我这个做了错误的方式?
的ROWID是伪列,即实际上并未声明为表的一部分。还有两行可以具有相同的ROWID的情况。不知道你打算如何使用它,因为它很难说它是否对你有任何用处。查看https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:53140678334596,了解一些ROWID考虑因素。 – BriteSponge
@BriteSponge尽管ROWID是伪列,但JOOQ仍然允许我通过选择查询来检索它。不幸的是,尽管如果没有主键使用它并不是100%安全的,我仍然必须使用rowid,并且不能选择其他解决方法。 –