ROWID伪列值的获取

在数据表中每一行所保存的记录,实际上Oracle都会默认为每条记录分配一个唯一的地址编号,而这个地址编号就是通过ROWID进行表示的,ROWID本身是一个数据的伪列,所有的数据都利用ROWID进行数据定位。

SYS@PRODCDB> select rowid, deptno, dname, loc from scott.dept;

ROWID       DEPTNO DNAME     LOC
------------------ ---------- -------------- -------------
AAAWeDAAJAAAACTAAA   10 ACCOUNTING     NEW YORK
AAAWeDAAJAAAACTAAB   20 RESEARCH     DALLAS
AAAWeDAAJAAAACTAAC   30 SALES     CHICAGO
AAAWeDAAJAAAACTAAD   40 OPERATIONS     BOSTON

从上面的语句结果中可以看出,每一行的ROWID是不同的,都表示唯一的一条记录,以期中一条ROWID为例,分解ROWID的组成部分:

ROWID: AAAWeDAAJAAAACTAAA

数据对象号(data object number):AAAWeD
相对文件号(relative file number):AAJ
数据块号(block number):AAAACT
数据行号(row number):AAA

通过以下的函数可以从一个ROWID中取得相对应的数据:
dbms_rowid.rowid_object(rowid)----取得数据对象号
dbms_rowid.rowid_relative_fno(rowid)----取得相对文件号
dbms_rowid.rowid_block_number(rowid)----取得数据块号
dbms_rowid.rowid_row_number(rowid)----取得数据行号

SYS@PRODCDB> select rowid,
 2  dbms_rowid.rowid_object(rowid) object_no,
  3  dbms_rowid.rowid_relative_fno(rowid) file_no,
  4  dbms_rowid.rowid_block_number(rowid) block_no,
  5  dbms_rowid.rowid_row_number(rowid) row_no from scott.dept;

ROWID                         OBJECT_NO  FILE_NO   BLOCK_NO ROW_NO
---------------------------------  ----------------  ------------   --------------- -------------
AAAWeDAAJAAAACTAAA          92035           9         147             0
AAAWeDAAJAAAACTAAB          92035           9         147             1
AAAWeDAAJAAAACTAAC          92035           9         147             2
AAAWeDAAJAAAACTAAD          92035           9         147             3

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30192548/viewspace-2123853/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30192548/viewspace-2123853/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值