rowid結構淺析

select rowid from dual

AAAAB0AABAAAAOhAAA

rowid結構如下:

對象號    文件號   塊號   行號
XXXXXX    XXX     XXXXXX XXX

因此,
AAAAB0 對象號
AAB    文件號
AAAAOh 塊號
AAA    行號

如何得知這些編號對應的十進制編碼值呢(rowid是基於64位編碼的18個字符顯示的,對象號(6)+文件號(3)+塊號(6)+行號(3)),其中
A-Z    0-25
a-z    26-51
0-9    52-61
+/     62-63
共64位,明白這個後我們就可以計算出十進制的編碼值了,計算公式如下:
d*(b^p)
d      表示字符對應的十進制編碼值
b      64
p      從右至左,每個對象從0開始計數

比如計算rowid=AAAAB0AABAAAAOhAAA的塊號:
AAAAOh
33*(64^0)=33
14*(64^1)=896
0*(64^2)=0
0*(64^3)=0
0*(64^4)=0
0*(64^5)=0

塊號就是33+896=929

可以通過dbms_rowid包來獲得相關信息:
select  dbms_rowid.rowid_object(rowid) objectid--對象號
       ,dbms_rowid.rowid_relative_fno(rowid) fileid--文件號
       ,dbms_rowid.rowid_block_number(rowid) blockid--塊號
       ,dbms_rowid.rowid_row_number(rowid) rownums--行號
from dual

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章