ORACLE数据库中的ROWID

转载 2007年09月22日 21:36:00
我们可能对oracle的rowid的使用并不陌生,不过,如果仔细分析一下,发现其还是有些知识点。
  
  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后  

oracle 表中的rowid是什么意思

rowid是数据库的一个伪列,建立表的时候数据库会自动为每个表建立ROWID列   伪列如同数据表的列,但它实际上不存储在表中   你可以从这些伪列中提取值   但你不能将值插入、更...
  • ahwr24
  • ahwr24
  • 2011年08月27日 22:18
  • 6119

Oracle伪列之rowmun和rowid

rownum和rowid的共同点是什么? 都是伪劣 rowid是什么? 给一行,除非该行被删除并重新插入(就是说它是另一行,不再是原来那行了),rowid会保持不变。 G Rowid在...
  • moses19
  • moses19
  • 2017年08月02日 21:57
  • 408

Oracle中ROWNUM伪列和ROWID伪列的用法与区别

做过Oracle分页的人都知道由于Oracle中没有像MySql中limit函数以及SQLServer中的top关键字等,所以只能通过伪列的方式去满足分页功能,在此,不谈分页方法,只从根本上去介绍这两...
  • yu102655
  • yu102655
  • 2016年08月30日 17:05
  • 9541

oracle学习总结(一)---ROWID

oracle学习总结(一)---ROWID       搞oracle都会经常碰到rowid,本文是笔者根据网上各位大虾的文章,加上自己学习中的体会,总结而成。一.rowid简介        row...
  • hbcui1984
  • hbcui1984
  • 2006年11月20日 13:36
  • 4992

hibernate增加OracleRowId支持

利用Hibernate的进行标准的SQL进行查询时,竟然不支持ORACLE的rowid直接查询: Java代码   session.createSQLQuery("select r...
  • lwqjn
  • lwqjn
  • 2014年07月07日 11:28
  • 604

oracle中rowid的用法 (全面)

oracle中rowid的用法 分类: Oracle Fundamental 2013-10-25 14:52 34人阅读 评论(0) 收藏 举报 ROWID数据块DUMPBASE64编码 ...
  • haiross
  • haiross
  • 2013年11月11日 14:33
  • 54395

ORACLE 中rowid查询重复记录的sql语句分析

SQL  语句 SELECT ROWID,EMPNO,JOB FROM EMP WHERE ROWID!=(SELECT MAX(ROWID) FROM EMP D WHERE EMP.JOB=D....
  • hello_yang213
  • hello_yang213
  • 2012年04月08日 22:22
  • 1933

mysql rowid

mysql 没有rowidprimary key(id,sn);second index (name) —隐含为(id,sn,name)二级索引里存的是 PK...
  • zhaoyangjian724
  • zhaoyangjian724
  • 2015年10月21日 14:13
  • 2658

Oracle中ROWID详解

oracle数据库的表中的每一行数据都有一个唯一的标识符,或者称为rowid,在oracle内部通常就是使用它来访问数据的。rowid需要 10个字节的存储空间,并用18个字符来显示。该值表明了该行在...
  • wxwpxh
  • wxwpxh
  • 2016年01月17日 16:52
  • 5436

plsql中Rowid的用法

ROWID的用法: ROWID是数据的详细地址,通过rowid,oralce可以快速的定位某行具体的数据的位置。 select a.*,rowid from 表名 a where 列名='...
  • stalin_
  • stalin_
  • 2017年06月27日 20:13
  • 1729
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ORACLE数据库中的ROWID
举报原因:
原因补充:

(最多只允许输入30个字)