1、rowid是一个伪列,是用来确保表中行的唯一性,它并不能指示出行的物理位置,但可以用来定位行。 2、rowid是存储在索引中的一组既定的值(当行确定后)。我们可以像表中普通的列一样将它选出来。
3、利用rowid是访问表中一行的最快方式。
4、rowid需要10个字节来存储,显示为18位的字符串。
rowid的组成结构为:
data object number(6位字符串) relative file number(3位字符串) block number(6位字符串) row number(3位字符串),如:AAAADeAABAAAAZSAAA
5、我们可以借助oracle提供的包dbms_rowid,来对rowid进行解析从而获取关于行的相关信息:
bossdb-SQL>select
2 rowid,
3 dbms_rowid.rowid_object(rowid) obj_id,
4 dbms_rowid.rowid_relative_fno(rowid) df#,
5 dbms_rowid.rowid_block_number(rowid) blknum,
6 dbms_rowid.rowid_row_number(rowid) rowno
7 from p_test where rownum<5;
ROWID OBJ_ID DF# BLKNUM ROWNO
------------------ ---------- ---------- ---------- ----------
AAAQ tAANAAAC6SAAA 69549 13 11922 0 AAAQ tAANAAAC6SAAB 69549 13 11922 1 AAAQ tAANAAAC6SAAC 69549 13 11922 2 AAAQ tAANAAAC6SAAD 69549 13 11922 3
我们可以看到,通过rowid_row_number得到的行号是从0开始的,这是和rownum伪列的一个不同之处。我猜测rowid_row_number在求行号的时候是计算首行的偏移量。
一般来说,当表中的行确定后,rowid就不会发生变化。
但当如下情况发生时,rowid将发生改变:
1、对一个表做表空间的移动后
2、对一个表进行了EXP/IMP
分享到:
相关推荐
mysql虚拟了一个rowid(类似跟oracle的rowid)--SQL语句
Oracle数据库rowid深入探析.pdf
总结一下几种查找和删除重复记录的方法,适用于有大量重复记录的情况
oracle rowid rownum 等组成原理
利用rowid快速在线更新海量数据 利用rowid快速在线更新海量数据
oracle_SQL中rowid与rownum的使用
oracle_SQL中ROWID与ROWNUM的使用 很有用哦
Oracle学习笔记(rownum和rowid),有具体的代码案例讲解rownum和rowid
举例介绍在oracle中rownum和rowId的不同以及使用方法
oracle error invalid rowid
ROWID是ORACLE中的一个重要的概念。用于定位数据库中一条记录的一个相对唯一地址值。通常情况下,该值在该行数据插入到数据库表时即被确定且唯一。ROWID它是一个伪列,它并不实际存在于表中。它是ORACLE在读取表中...
oracle 数据库 rowid与rownum的使用
Hint.pdf Oracle中rowid与rownum的使用.pdf Oracle优化 之 索引.pdf Oracle优化器.pdf STATSPACK详解.pdf 学用ORACLE_AWR和ASH特性.pdf 执行计划.pdf
掌握Oracle中rowid,rownum的使用,掌握ORACLE分页语句的写法,掌握ORACLE存储过程的创建和使用,
oracle_SQL中 rowid 和rownum的使用
基于Oracle RowID实现批量数据的分页下载.pdf
删除重复记录的方法原理:在Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是在Oracle中的哪一个数据文件、块、行上。在重复的记录中,可能所有列的内容都相同,但rowid不会...
对一个大表进行UPDATE,DELETE,如果在一个SESSION里面运行SQL,很容易引发undo不够, 或者由于一些原因,导致回滚,这个是灾难