rowid也算是Oracle特有的一个东西,既然存在,肯定有存在的道理。rowid其实是对该row对应的物理地址的一个描述。就像tom说过:A rowid is assigned to a row upon insert and is imutable (never changing) unless the row is deleted and re-inserted (meaning it is another row, not the same row!)
既然rowid是对物理地址的一个描述,那么就选取一个rowid来拆分下具体含义。比如我从表中select出来的一个rowid: AAAM98AAEAAAAG0AAA
在这里,第一位到第六位AAAM98是指数据对象号。
第七位到第十位AAE是指相对文件号。
第十位到第十六位AAAAG0是指数据块号。
最后三位也就是快内的行号。另外,从网上找到一些跟rowid相关的系统函数。
---------------------------------------------------------
function rowid_block_number returns number ( row_id in rowid , ts_type_in in varchar2 default );
---------------------------------------------------------
function rowid_create returns rowid ( rowid_type in number , object_number in number , relative_fno in number , block_number in number , row_number in number );
---------------------------------------------------------
procedure rowid_info ( rowid_in in rowid , rowid_type out number , object_number out number , relative_fno out number , block_number out number , row_number out number , ts_type_in in varchar2 default );
---------------------------------------------------------
function rowid_object returns number ( row_id in rowid );
---------------------------------------------------------
function rowid_relative_fno returns number ( row_id in rowid , ts_type_in in varchar2 default );
---------------------------------------------------------
function rowid_row_number returns number ( row_id in rowid );
---------------------------------------------------------
function rowid_to_absolute_fno returns number ( row_id in rowid , schema_name in varchar2 , object_name in varchar2 );
---------------------------------------------------------
function rowid_to_extended returns rowid ( old_rowid in rowid , schema_name in varchar2 , object_name in varchar2 , conversion_type in number(38) );
---------------------------------------------------------
function rowid_to_restricted returns rowid ( old_rowid in rowid , conversion_type in number(38) );
---------------------------------------------------------
function rowid_type returns number ( row_id in rowid );
---------------------------------------------------------
function rowid_verify returns number ( rowid_in in rowid , schema_name in varchar2 , object_name in varchar2 , conversion_type in number(38) ); ---------------------------------------------------------
最后,我见过有人利用rowid使查询变得效率更高,具体怎么回事我忘了,真是以废话结尾。