SQL> select rowid,deptno from dept;
ROWID DEPTNO
------------------ ----------
AAAMfNAAEAAAAAQAAA 10
AAAMfNAAEAAAAAQAAB 20
AAAMfNAAEAAAAAQAAC 30
AAAMfNAAEAAAAAQAAD 40
对象号 | 文件号 | 块号 | 行号 |
AAAMfN | AAE | AAAAAQ | 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=AAAMfNAAEAAAAAQAAA的块号:
AAAMfN—对象号 —— 51149
N – 13*(64^0)=13
f – 31*(64^1)=1984
M – 12*(64^2)=49152
A – 0*(64^3)=0
A – 0*(64^4)=0
A – 0*(64^5)=0
AAE—文件号 —— 4
E – 4*(64^0)=4
A – 0*(64^1)=0
A – 0*(64^2)=0
AAAAAQ—块号 —— 16
Q –16*(64^0)=16
A – 0*(64^1)=0
A – 0*(64^2)=0
A – 0*(64^3)=0
A – 0*(64^4)=0
A – 0*(64^5)=0
AAA—行号 —— 0
A – 0*(64^0)=0
A – 0*(64^1)=0
A – 0*(64^2)=0
SQL> select dbms_rowid.rowid_object(rowid) objectid--对象号
2 ,dbms_rowid.rowid_relative_fno(rowid) fileid--文件号
3 ,dbms_rowid.rowid_block_number(rowid) blockid--块号
4 ,dbms_rowid.rowid_row_number(rowid) rownums--行号
5 ,deptno
6 from dept;
OBJECTID FILEID BLOCKID ROWNUMS DEPTNO
---------- ---------- ---------- ---------- ----------
51149 4 16 0 10
51149 4 16 1 20
51149 4 16 2 30
51149 4 16 3 40