oracle数据库的表中的每一行数据都有一个唯一的标识符,或者称为rowid,在oracle内部通常就是使用它来访问数据的。rowid需要 10个字节的存储空间,并用18个字符来显示。该值表明了该行在oracle数据库中的物理具体位置。可以在一个查询中使用rowid来表明查询结果中包含该值。

保存rowid需要10个字节或者是80个位二进制位。这80个二进制位分别是:
      1. 数据对象编号,表明此行所属的数据库对象的编号,每个数据对象在数据库建立的时候都被唯一分配一个编号,并且此编号唯一。数据对象编号占用大约32位。
      2. 对应文件编号,表明该行所在文件的编号,表空间的每一个文件标号都是唯一的。文件编号所占用的位置是10位。
      3. 块编号,表明改行所在文件的块的位置块编号需要22位。
      4. 行编号,表明该行在行目录中的具体位置行编号需要16位。
这样加起来就是80位。

Oracle的物理扩展ROWID有18位,每位采用64位编码,分别用A~Z、a~z、0~9、+、/共64个字符表示。A表示0,B表示1,……Z表示25,a表示26,……z表示51,0表示52,……,9表示61,+表示62,/表示63。

例如:

select rowid,empid from scott.emp;

将会得到结果:

select rowid,empno from scott.emp;

ROWID EMPNO

------------------ ----------

AAAR3sAAEAAAACXAAA 7369

AAAR3sAAEAAAACXAAB 7499

AAAR3sAAEAAAACXAAC 7521

AAAR3sAAEAAAACXAAD 7566

AAAR3sAAEAAAACXAAE 7654

AAAR3sAAEAAAACXAAF 7698

AAAR3sAAEAAAACXAAG 7782

AAAR3sAAEAAAACXAAH 7788

AAAR3sAAEAAAACXAAI 7839

AAAR3sAAEAAAACXAAJ 7844

AAAR3sAAEAAAACXAAK 7876

AAAR3sAAEAAAACXAAL 7900

AAAR3sAAEAAAACXAAM 7902

AAAR3sAAEAAAACXAAN 7934

已选择14行。

这里的AAAR3s是数据库对象编号,AAE是文件标号,AAAACX是块编号,最后三位(empno = 7934时为AAN)是行编号。

据下面的查询结果:

SQL> select FILE_ID as fid,FILE_NAME  from dba_data_files where TABLESPACE_NAME='USERS' ;

FID FILE_NAME

---------- ---------------------------------------------

4 D:\APP\WANGXUWEI\ORADATA\ORCL\USERS01.DBF

我们可看出FILE_ID=4,就是ROWID中AAE。

通过dbms_rowid包,可以直接得到具体的rowid包含的信息:

SQL> select dbms_rowid.rowid_object(rowid) object_id,dbms_rowid.rowid_relative_fno(rowid) file_id,dbms_rowid.rowid_block_number(rowid) block_id,dbms_rowid.rowid_row_number(rowid) row_number from emp;

OBJECT_ID    FILE_ID BLOCK_ID ROW_NUMBER

---------- ---------- ---------- ----------

73196    4     151  0

73196    4     151  1

73196    4     151  2

73196    4     151  3

73196    4     151  4

73196    4     151  5

73196    4     151  6

73196    4     151  7

73196    4     151  8

73196    4     151  9

73196    4     151 10

OBJECT_ID    FILE_ID BLOCK_ID ROW_NUMBER

---------- ---------- ---------- ----------

73196    4     151 11

73196    4     151 12

73196    4     151 13

已选择14行。

我们可验算如下:73196=AAAR3s=17×64×64+55×64+44

151=AAAACX=2×64+23
最后一条记录编号AAN =13

通过dbms_rowid包,还可以查询到表或记录所在的文件
SQL> select file_name, file_id from dba_data_files where file_id in  (select distinct dbms_rowid.rowid_relative_fno(rowid) from scott.emp);

FILE_NAME FILE_ID
--------------------------------------------- ----------
D:\APP\WANGXUWEI\ORADATA\ORCL\USERS01.DBF                      4

使用describle(或简写为desc)命令查看表结构时,输出结果中是不能看到rowid这里一列的,这是因为这一列只在数据库内部使用,rowid通常被称为一个伪列。在某些oracle数据库操作的IDE(例如golden)中使用这些工具自带的数据编辑功能时,必须指定rowid列才能完成,例如如果想选择

scott.emp的数据后进行手工修改,则必须使
select rowid,t.* from scott.emp t;
而不能直接写成
select * from emp;

原文链接:https://blog.csdn.net/wxwpxh/article/details/50532464

Oracle中ROWID详解的更多相关文章

  1. 【转载】oracle之rowid详解

    原文URL:http://www.2cto.com/database/201109/104961.html 本文讨论的是关于oracle从8i开始引进object的概念后的rowid,即扩展(exte ...

  2. oracle中hint 详解

    Hint概述 基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担.但有时它也聪明反被聪明误,选择了很差的执行计划,使某个语句的执行变得奇慢无比. 此时就需要DBA进行 ...

  3. oracle中存储过程详解

    oracle中存储过程的使用 过程是指用于执行特定操作的PL/SQL块.如果客户应用经常需要执行特定操作,那么可以考虑基于这些操作建立过程.通过使用过程,不仅可以简化客户应用的开发和维护,而且可以提高 ...

  4. oracle 中 dual 详解

    基本上oracle引入dual为的就是符合语法1. 我们先从名称来说,dual不是缩写词,本身就是完整的单词.dual名词意思是对数,做形容词时是指二重的,二元的.2. Oracle中的dual表是一 ...

  5. oracle rowid 详解

    oracle rowid详解 今天是2013-09-15,存储在数据库中的每一行数据都有一个地址,oracle使用rowid数据类型在存储地址.rowid有如下类别: 1)physical rowid ...

  6. Oracle执行计划详解

    Oracle执行计划详解 --- 作者:TTT BLOG 本文地址:http://blog.chinaunix.net/u3/107265/showart_2192657.html --- 简介:   ...

  7. oracle tkprof 工具详解

    oracle  tkprof 工具详解 今天是2013-09-26,进行tkprof工具使用学习,在此记录一下笔记: 一)查看需要跟踪会话信息: select s.sid,s.serial#,s.us ...

  8. [转]Oracle执行计划详解

    Oracle执行计划详解 --- 作者:TTT BLOG 本文地址:http://blog.chinaunix.net/u3/107265/showart_2192657.html --- 简介:   ...

  9. Oracle建立全文索引详解

    Oracle建立全文索引详解1.全文检索和普通检索的区别 不使用Oracle text功能,当然也有很多方法可以在Oracle数据库中搜索文本,比如INSTR函数和LIKE操作: SELECT *FR ...

随机推荐

  1. CodeChef - ELHIDARR Find an element in hidden array(二分交互)

    Find an element in hidden array There is an array of length N consisting of non-negative integers. T ...

  2. 怎么判断DropDownList是否选择值

    判断其 SelectedIndex 属性值 >0.

  3. 《剑指offer》面试题21—包含min函数的栈

    题目:定义栈数据结构,并在该数据结构中实现一个能获得栈最小元素的函数min.要求push,min,pop时间都是O(1). 思路:要用一个辅助栈,每次有新元素压栈时辅助栈压入当前最小元素:min函数直 ...

  4. SEO优化之——hreflang(多语言网站优化)

    用法格式 <link rel="alternate" href="URL" hreflang="zh-cn"> // href ...

  5. ZOJ3526【缩点思想】

    一开始做的时候(TLE),A,C,G这三类作为边,然后点和点直接建边搜个环:then time BOOM! 可以发现只属于"A"类的之间都并在一起就好,同理"G" ...

  6. ffmpeg h264转h265

    ffmpeg -i d:\soft\720p.mp4 -c:v libx265 -b:v 5000k d:\soft\myvideo.mp4 这里码率是5000k,编码是h265 h265的解码貌似用 ...

  7. Hyperledger Fabric (1.0)环境部署 chaincode【转】

    三.测试Fabric 其实我们在前面运行./network_setup.sh up的时候系统已经运行了一个Example02的ChainCode测试,部署上去的ChainCodeName是mycc,所 ...

  8. 洛谷P2134 百日旅行

    P2134 百日旅行 题目背景 重要的不是去哪里,而是和你在一起.——小红 对小明和小红来说,2014年7月29日是一个美好的日子.这一天是他们相识100天的纪念日. (小明:小红,感谢你2场大考时默 ...

  9. SpringBoot2.0 基础案例(03):配置系统全局异常映射处理

    一.异常分类 这里的异常分类从系统处理异常的角度看,主要分类两类:业务异常和系统异常. 1.业务异常 业务异常主要是一些可预见性异常,处理业务异常,用来提示用户的操作,提高系统的可操作性. 常见的业务 ...

  10. 人民网慕课联手FISCO BCOS开源社区上线“区块链学院”

    FISCO BCOS是完全开源的联盟区块链底层技术平台,由金融区块链合作联盟(深圳)(简称金链盟)成立开源工作组通力打造.开源工作组成员包括博彦科技.华为.深证通.神州数码.四方精创.腾讯.微众银行. ...