我有一個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,並且不能選擇其他解決方法。 –