ITPub博客

首页 > 数据库 > Oracle > ROWID伪列值的获取

ROWID伪列值的获取

原创 Oracle 作者:lilingfeng1 时间:2016-08-23 14:53:32 0 删除 编辑
在数据表中每一行所保存的记录,实际上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博客 ” ,链接:https://blog.itpub.net/30192548/viewspace-2123853/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: Oracle—行列转换
请登录后发表评论 登录
全部评论

注册时间:2015-04-05

  • 博文量
    51
  • 访问量
    38500