[英]Oracle 11g JDBC prefetching keys
我的應用程序需要知道哪一行接收數據庫中的哪個鍵。
我在具有批處理更新的讀提交隔離級別上使用JDBC。 因此,無法使用getGeneratedKeys檢索密鑰。 我的計划是以事務安全的方式從數據庫中獲取ID范圍,例如,兩個並行事務無法獲取相同的密鑰。
我可以編寫一些帶有將來行數作為參數的SQL查詢來在Oracle 11g中獲取將來鍵的列表嗎?
我在這里有什么選擇?
您可以為此使用序列:
create sequence s;
檢索ID
select s.nextval from dual;
或檢索ID范圍:
select s.nextval from dual connect by level <= 10;
只是想添加:
序列和表之間沒有明確的關系。 序列只是生成數字序列的一種機制。 您可以假設一個序列永遠不會產生重復的值,僅此而已。 不要假設順序, 絕對不要期望無間隙序列。 順序設計是在Oracle中通過這種方式完成的。 通過遵循這些規則,並且不對序列的行為進行其他假設,我們可以獲得序列的極高可擴展性。 請注意,一旦嘗試執行訂單或無間隙序列,您的性能就會遭受嚴重損害。
總結:1.)序列非常簡單,而且速度非常快。 2.)除了“禁止復制”以外,不要假設您可以預測序列的行為。 3.)序列是獨立的對象,不與表綁定,可用於生成將在同一表或許多不同表中使用的序列值。
希望能有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.