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

ROWID EMPNO

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

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;

Oracle中ROWID详解相关推荐

  1. oracle rowID切片,Oracle中ROWID详解

    Oracle的ROWID用来唯一标识表中的一条记录,是这条数据在数据库中存放的物理地址. Oracle的ROWID分为两种:物理ROWID和逻辑ROWID.索引组织表使用逻辑ROWID,其他类型的表使 ...

  2. Oracle中ROWID详解及应用

    一.rowid认识 Oracle数据库的表中的每一行数据都有一个唯一的标识符,或者称为rowid,在oracle内部通常就是使用它来访问数据的.rowid需要 10个字节的存储空间,并用18个字符来显 ...

  3. Oracle中CONCAT详解

    Oracle中CONCAT详解 1.什么是CONCAT 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写 ...

  4. oracle语句中dual什么意思,oracle中dual详解

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

  5. oracle中to_date详解

    oracle中to_date详解 TO_DATE格式(以时间:2007-11-02 13:45:25为例) 1. 日期和字符转换函数用法(to_date,to_char) 代码如下: select t ...

  6. oracle中hint 详解

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

  7. oracle rowid java_【转载】oracle之rowid详解

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

  8. oracle中sequence详解

    在Oracle数据库中,序列的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值.本文我们主要介绍了序列的用法,希望能够对您有所帮助. 在Oracle数据库中, ...

  9. Oracle中to_Char详解,Oracle to_char 函数详解

    to_char,函数功能,就是将数值型或者日期型转化为字符型. 比如最简单的应用: Select TO_CHAR(1.0123) FROM DUAL Select TO_CHAR(123) FROM ...

最新文章

  1. Attention最新进展
  2. 特斯拉线圈的阻抗分析
  3. 关于“Cannot find any provider supporting AES/ECB/PKCS7Padding”问题的解决方案
  4. onbeforeedit和onbeginedit数据不一致_Redis缓存与数据库产生不一致的问题该如何解决?...
  5. 【Usaco2014Open银组】照相(pairphoto)
  6. bzoj 2142 礼物
  7. 11.20 HTML及CSS
  8. qt使用QZxing生成二维码
  9. 北京1954坐标转为经纬度坐标
  10. greensock下载_GreenSock动画平台初学者指南
  11. PS精讲精练读书笔记
  12. 桃李春风一杯酒,江湖夜雨十年灯。
  13. 【附源码】计算机毕业设计java信用卡增值业务系统设计与实现
  14. Django DTL 与verbatim
  15. LLaMA模型系统解读
  16. 原始套接字的花花世界
  17. 不写情书,程序员为什么还要学写作?
  18. MATLAB算法实战应用案例精讲-【自动驾驶】激光雷达标定
  19. 所有地区的中英文名称,手机区号,字母缩写(代码)json文件整理
  20. ucinet三天写论文!P1模型分析实战

热门文章

  1. bms系统中央服务器hp,hp 服务器bios设置
  2. C语言数组初始化的三种方法
  3. 你竟然还不知道用Mac该改哪些配置?
  4. C++11:右值引用、移动构造、std::move, 以及使用emplace_back代替push_back
  5. c++11中emplace_back vs push_back
  6. index of rmvb mp3 rm突破网站入口下载
  7. 基于UML的工作流管理系统分析
  8. PTA 1024 科学计数法 (c语言)
  9. Thymeleaf #strings对象
  10. 5免费上网安全工具,是绝对有用的