熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

ORACLE數據庫中的ROWID

2013-11-13 15:50:23  來源: Oracle 

  我們可能對oracle的rowid的使用並不陌生不過如果仔細分析一下發現其還是有些知識點
  
  rowid是一個偽列是用來確保表中行的唯一性它並不能指示出行的物理位置但可以用來定位行 rowid是存儲在索引中的一組既定的值(當行確定後)我們可以像表中普通的列一樣將它選出來
  
  利用rowid是訪問表中一行的最快方式
  
  rowid需要個字節來存儲顯示為位的字符串
  
  rowid的組成結構為
  
  data object number(位字符串)+relative file number(位字符串)+block number(位字符串)+row number(位字符串)AAAADeAABAAAAZSAAA
  
  我們可以借助oracle提供的包dbms_rowid來對rowid進行解析從而獲取關於行的相關信息
  
  bossdbSQL>select
   rowid
   dbms_rowidrowid_object(rowid) obj_id
   dbms_rowidrowid_relative_fno(rowid) df#
   dbms_rowidrowid_block_number(rowid) blknum
   dbms_rowidrowid_row_number(rowid) rowno
   from p_test where rownum<;
  ROWID OBJ_ID DF# BLKNUM ROWNO
  
  AAAQ+tAANAAACSAAA AAAQ+tAANAAACSAAB AAAQ+tAANAAACSAAC AAAQ+tAANAAACSAAD
  
  我們可以看到通過rowid_row_number得到的行號是從開始的這是和rownum偽列的一個不同之處我猜測rowid_row_number在求行號的時候是計算首行的偏移量
  
  一般來說當表中的行確定後rowid就不會發生變化
  
  但當如下情況發生時rowid將發生改變
  
  對一個表做表空間的移動後
  
  對一個表進行了EXP/IMP後
From:http://tw.wingwit.com/Article/program/Oracle/201311/17378.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.