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