rowid 的问题

[复制链接]
查看11 | 回复9 | 2005-10-30 17:05:33 | 显示全部楼层 |阅读模式
SQL> select rowid,v_1 from t1;
ROWID V_1
------------------ ----------
AAABnlAAFAAAAAPAAA 2
AAABnl (32 bit)代表 data object number
AAF (10bit)代表relative file number
AAAAAP(22bit) 代表 block number
AAA (16 bit)代表 row number
但是我怎样才能把 AAABnl 转换成 object#
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
最初由 zhaolcq 发布
[B]SQL> select rowid,v_1 from t1;
ROWID V_1
------------------ ----------
AAABnlAAFAAAAAPAAA 2
AAABnl (32 bit)代表 data object number
AAF (10bit)代表relative file number
AAAAAP(22bit) 代表 block number
AAA (16 bit)代表 row number
但是我怎样才能把 AAABnl 转换成 object# [/B]

这是一种64进制的表示法,规则如下:
A-Z0-25
a-z 26-61

+ 62
/
63
因此,你例子中的AAABnl ,应该是:

2*64*64+39*64+12 =10070.
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
最初由 fishman 发布
[B]
这是一种64进制的表示法,规则如下:
A-Z0-25
a-z 26-61

+ 62
/
63
因此,你例子中的AAABnl ,应该是:

2*64*64+39*64+12 =10070. [/B]


a-z一共26个字符,怎么表示26-61,这是36个数字。
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
up
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
最初由 lawzjf 发布
[B]

a-z一共26个字符,怎么表示26-61,这是36个数字。 [/B]

还有0-9么
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
是 6629
你可以使用dbms_rowid 来计算转换
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
[PHP]
SQL> select get_rowid('AAABnlAAFAAAAAPAAA') "ROWID" from dual;
ROWID
--------------------------------------------------------------------------------
Object# is:6629
Relative_fno is :5
Block number is :15
Row number is :'0'
[/PHP]
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
SQL> select get_rowid('AAAAqBAACAAAAL2AAA') from dual;
select get_rowid('AAAAqBAACAAAAL2AAA') from dual
*
错误位于第1行:
ORA-00904: 无效列名
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
那是我自己写的一个函数,参考如下:
[PHP]
create or replace function get_rowid
(l_rowid in varchar2)
return varchar2
is
ls_my_rowid
varchar2(200);

rowid_type
number;

object_number
number;

relative_fno
number;

block_number
number;

row_number
number;
begin
dbms_rowid.rowid_info(l_rowid,rowid_type,object_number,relative_fno, block_number, row_number);

ls_my_rowid := 'Object# is:'||to_char(object_number)||chr(10)||

'Relative_fno is :'||to_char(relative_fno)||chr(10)||

'Block number is :'||to_char(block_number)||chr(10)||

'Row number is :'||to_char(row_number);
return ls_my_rowid ;
end;

/
[/PHP]
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
试试用 dbms_rowid 包
SQL> conn / as sysdba
Connected.
SQL>
SQL> select dbms_rowid.rowid_object(rowid),deptno from scott.dept;
DBMS_ROWID.ROWID_OBJECT(ROWID) DEPTNO
------------------------------ ----------

34439 10

34439 20

34439 30

34439 40
SQL>
SQL> select name
2from obj$
3where dataobj#=34439;
NAME
------------------------------
DEPT
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行