rowid:select t.*,t.rowid from test t; -- AACeJKAAIAAAA4XAAA

注:有个很二需求,通过一个存储过程插入的数据必须是放在一块的,不能分散开存储,考虑用到使用insert /*+append*/ into插入数据,需要了解一下数据的存储原理

AACeJK                   AAI                AAAA4X           AAA

数据对象编号(6位)文件编号(3位) 块编号(6位)    行序号(3位)

 

declare

  v_rowid         rowid;

  v_rowid_type    number;

  v_object_number number;

  v_relative_fno  number;

  v_block_number  number;

  v_row_number    number;

begin

  --得到输入变量v_rowid,把它传递给dbms_rowid.rowid_info过程

  dbms_rowid.rowid_info('AACeJKAAIAAAA4XAAA',

                        v_rowid_type,

                        v_object_number,

                        v_relative_fno,

                        v_block_number,

                        v_row_number);

  dbms_output.put_line('row id is: ' || v_rowid);

  dbms_output.put_line('rowid type is: ' || v_rowid_type || ' -- ' ||

                       v_object_number || ' -- ' || v_relative_fno ||

                       ' -- ' || v_block_number || ' -- ' || v_row_number); --此处测试仅显示1-2个输出参数,其它同理

end;

select dbms_rowid.rowid_relative_fno(row_id => 'AACeJKAAIAAAA4XAAA')

  from dual

        select * from v$datafile;

 

 --数据对象编号

select * from user_objects t where t.data_OBJECT_ID = '647754';

--文件编号

select * from v$datafile where file# = 8;

 

 rowid本身是一种数据类型

错误:

select t.*,t.rowid from test t where t.rowid ='AAA111'; 

正确:

select t.*,t.rowid from test t where ROWIDTOCHAR(t.rowid)='AAA111';

 

ROWIDTOCHAR(t.rowid):将rowid转化成string

CHARTOROWID('rowid_string') :将string转换成ROWID

select CHARTOROWID('AAAAB0AABAAAAOhAAA') from dual;

rowid类型:

Extended rowid:使用表空间相关的数据块地址,8i及以上使用这种格式

Restricted rowid:使用数据库范围的数据块地址,oracle 7或更早前的版本使用

 

posted on 2016-04-26 11:48  zyb_java  阅读(518)  评论(0编辑  收藏  举报