rowid都包括哪些信息?

[复制链接]
查看11 | 回复5 | 2006-4-17 13:46:34 | 显示全部楼层 |阅读模式
subs(rowid,15,4)是数据文件号吗?
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
从Oracle8开始,Oracle引入扩展ROWID的概念。
扩展ROWID使用base-64,占用18位
格式:OOOOOOFFFBBBBBBRRR:
-OOOOOO: (1-6位),代表OBJECT 号
-FFF:(7-9位),表空间相对文件号
-BBBBBB:(10-15)包含行数据的数据块号
-RRR: (16-18)块中的行号

你可以用DBMS_ROWID包来转换和管理rowid
给你做个范例:
SQL> set timing on
SQL> create table test (id number);
表已创建。
已用时间:00: 00: 00.01
SQL> insert into test values(1);
已创建 1 行。
已用时间:00: 00: 00.30
SQL> commit;
提交完成。
已用时间:00: 00: 00.10
SQL>
SQL> select substr(rowid,1,6) "Object",
2 substr(rowid,7,3) "File",
3 substr(rowid,10,6) "Block",
4 substr(rowid,16,3) "Row"
5from test;
Object
File Block
Row
------------------------ ------------ ------------------------ ------------
AAAJXa
AAJ
AAACmB
AAA
已用时间:00: 00: 00.80
SQL>
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
但是这个值,怎样转换成实际值呢?我的数据库有7.2.3和8.1.5两种
另外,我发现你的每个SQL执行完成后都有个已用时间,你的SQLPLUS为什么会有这个?
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
Oracle7和Oracle8i的rowid已经不同,位数也不一样,意义也有不同。
所以从7迁移到8i更加复杂。
set timing on
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
使用dbms_rowid包可以获得上述信息:
如:
select dbms_rowid.rowid_relative_fno(rowid) "relative fno"
from test
/
看文档去
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
thx everybody
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行