首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

Oracle 無主鍵表分頁技巧:善用 ROWID 替代主鍵

     編輯:Oracle 教學

Oracle 無主鍵表分頁技巧:善用 ROWID 替代主鍵

傳統分頁寫法仰賴主鍵配合 ROWNUM,但遇到無主鍵表時,可利用 ROWID 這個物理位址偽欄位達成相同效果。ROWID 不會因排序、查詢甚至 UPDATE 而改變,適合作為穩定的唯一識別碼。

有主鍵表分頁範例

SELECT e.*
FROM scott.emp e
JOIN (
  SELECT empno id, ROWNUM rn FROM scott.emp
) pg ON e.empno = pg.id
WHERE pg.rn BETWEEN 5 AND 10;

無主鍵表:改用 ROWID

SELECT e.*
FROM scott.emp e
JOIN (
  SELECT ROWID rid, ROWNUM rn FROM scott.emp
) pg ON e.ROWID = pg.rid
WHERE pg.rn BETWEEN 5 AND 10;

關鍵點

  • ROWID 編碼包含:資料檔號、區塊號、列號、物件號,唯一且穩定。
  • 子查詢先產生 ROWID, ROWNUM 對應表,外層再 JOIN 回主表取欄位。
  • 適用於任何無主鍵、無唯一索引的堆疊表;索引組織表 (IOT) 的 ROWID 會隨分裂遷移而改變,需謹慎。

進階:標準分頁寫法(12c+)

SELECT * FROM scott.emp
ORDER BY empno
OFFSET 4 ROWS FETCH NEXT 6 ROWS ONLY;

Oracle 12c 引入 ANSI 標準 OFFSET ... FETCH,語意更清晰,建議新專案優先使用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved