数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

ORACLE数据库中的ROWID


发布日期:2018年06月17日
 
ORACLE数据库中的ROWID

我们可能对oracle的rowid的使用并不陌生不过如果仔细分析一下发现其还是有些知识点

rowid是一个伪列是用来确保表中行的唯一性它并不能指示出行的物理位置但可以用来定位行 rowid是存储在索引中的一组既定的值(当行确定后)我们可以像表中普通的列一样将它选出来

利用rowid是访问表中一行的最快方式

rowid需要个字节来存储显示为位的字符串

rowid的组成结构为

data object number(位字符串)+relative file number(位字符串)+block number(位字符串)+row number(位字符串)AAAADeAABAAAAZSAAA

我们可以借助oracle提供的包dbms_rowid来对rowid进行解析从而获取关于行的相关信息

bossdbSQL>select

rowid

dbms_rowidrowid_object(rowid) obj_id

dbms_rowidrowid_relative_fno(rowid) df#

dbms_rowidrowid_block_number(rowid) blknum

dbms_rowidrowid_row_number(rowid) rowno

from p_test where rownum<;

ROWID OBJ_ID DF# BLKNUM ROWNO

AAAQ+tAANAAACSAAA AAAQ+tAANAAACSAAB AAAQ+tAANAAACSAAC AAAQ+tAANAAACSAAD

我们可以看到通过rowid_row_number得到的行号是从开始的这是和rownum伪列的一个不同之处我猜测rowid_row_number在求行号的时候是计算首行的偏移量

一般来说当表中的行确定后rowid就不会发生变化

但当如下情况发生时rowid将发生改变

对一个表做表空间的移动后

对一个表进行了EXP/IMP后

上一篇:Oracle语句优化规则汇总(6)

下一篇:oracle中的单引号和双引号