前面已经学习过 Oracle 伪列的种类:

  • 与树状结构查询语句相关的伪列(包括 CONNECT_BY_ISCYCLE、CONNECT_BY_ISLEAF 和 LEVEL);
  • 与序列对象相关的伪列(CURRVAL和NEXTVAL);
  • 与版本控制相关的伪列(ORA_ROWSCN、VERSIONS_STARTSCN、VERSIONS_STARTTIME、VERSIONS_ENDSCN、VERSIONS_ENDTIME、VERSIONS_XID、VERSIONS_OPERATION);
  • 与嵌套表数据相关的伪列(COLUMN_VALUE);
  • 与对象数据表相关的伪列(OBJECT_ID、OBJECT_VALUE);
  • 与数据行相关的伪列(ROWID、ROWNUM)。

3、与版本控制相关的伪列

包括ORA_ROWSCN、VERSIONS_STARTSCN、VERSIONS_STARTTIME、VERSIONS_ENDSCN、VERSIONS_ENDTIME、VERSIONS_XID、VERSIONS_OPERATION等伪列。

这些伪列仅仅在 Oracle 的闪回版本查询语句中可用(Flashback Version Query)。

说到 Oracle 的 Flashback 功能(从 Oracle 10g 开始),主要包括四种类型:

  • Flashback Database,可以把整个数据库回退到过去的某个时点的状态。
  • Flashback Drop,用于恢复用户误删除的对象(包括表,索引等)。
  • Flashback Query,又分Flashback Query,Flashback Version Query, Flashback Transaction Query 三种
    • Flashback Query,利用oracle 查询多版本一致的特点,实现从回滚段中读取表一定时间内操作过的数据,可用来进行数据比对,或者修正意外提交造成的错误数据
    • Flashback Version Query,可以看到过去某个时间段内,记录是如何发生变化的(Flashback Query 只能看到一点的状态)
    • Flashback Transaction Query,可以查看某个事务执行的所有变化
  • Flashback Table。

对于这几种 Flashback 功能和前述伪列的作用,具体可参考cnblogs上的这篇博文,以及itpub上这篇博文中的详细描述。

4、与嵌套表数据相关的伪列(COLUMN_VALUE)(暂略)

5、与对象数据表相关的伪列(OBJECT_ID、OBJECT_VALUE)(暂略)

6、与数据行相关的伪列(ROWID、ROWNUM)

这是我们见得最多也最常用的伪列,其中 ROWID 返回每个数据行的物理地址,而 ROWNUM 用于返回检索集的数据行号。

ROWID 伪列返回的值是ROWID或UROWID类型,其中ROWID类型是普通的以堆方式存储数据表行的地址,由数据对象编号、数据行在数据文件中的数据块地址、数据行在数据块中的编号,以及数据所在数据文件的编号组成。而UROWID是索引组织方式存储数据表以及外部表行的地址。

其格式为18个64进制数字,这些数字由'A~Z'(对应十进制0~25)、'a~z'(对应十进制26~51)、'0~9'(对应十进制52~61)、+(对应十进制62)、/(对应十进制63)来表示。这18位64进制数字中(从左至右):前6位表示数据对象编号,转换成十进制后对应 DBA_OBJECTS 中的某个 DATA_OBJECT_ID,第7至9位表示对应表空间相应的文件编号,第10至15位表示数据文件中的数据块编号,最后3位表示在数据块中的记录(行)编号。

例如:

scott@ORA11G> select rowid from emp_flash;

ROWID
------------------
AAASoOAAEAAAQ5TAAA
AAASoOAAEAAAQ5TAAB
AAASoOAAEAAAQ5TAAC
AAASoOAAEAAAQ5TAAD
AAASoOAAEAAAQ5TAAE
AAASoOAAEAAAQ5TAAF
AAASoOAAEAAAQ5TAAG
AAASoOAAEAAAQ5TAAH
AAASoOAAEAAAQ5TAAI
AAASoOAAEAAAQ5TAAJ
AAASoOAAEAAAQ5TAAK
AAASoOAAEAAAQ5TAAL
AAASoOAAEAAAQ5TAAM
AAASoOAAEAAAQ5TAAN
AAASoOAAEAAAQ5TAAO

其中第一行数据的 rowid 表示对象编号为 AAASoO,表空间文件号为 AAE,数据块编号是 AAAQ5T,数据是数据块中第 AAA 个记录。

可以用下面的语句来查询相应的编码数据:

scott@ORA11G> select dbms_rowid.rowid_object(rowid) obj#,dbms_rowid.rowid_relative_fno(rowid) rfile#,dbms_rowid.rowid_block_number(rowid) block#,dbms_rowid.rowid_row_number(rowid) row#,dbms_rowid.rowid_to_absolute_fno(rowid,'SCOTT','EMP_FLASH') file# from emp_flash;

OBJ# RFILE# BLOCK# ROW# FILE#
---------- ---------- ---------- ---------- ----------
76302 4 69203 0 4
76302 4 69203 1 4
76302 4 69203 2 4
76302 4 69203 3 4
76302 4 69203 4 4
76302 4 69203 5 4
76302 4 69203 6 4
76302 4 69203 7 4
76302 4 69203 8 4
76302 4 69203 9 4
76302 4 69203 10 4
76302 4 69203 11 4
76302 4 69203 12 4
76302 4 69203 13 4
76302 4 69203 14 4

可以看见 OBJECT_ID 为76302,通过以下语句从 dba_objects 中查询(需要具有 dba 权限的用户)

system@ORA11G> select owner,object_name,object_id,object_type from dba_objects where object_id=76302;

OWNER OBJECT_NAME OBJECT_ID OBJECT_TYPE
------------- --------------------------------- ------------------
SCOTT EMP_FLASH      76302 TABLE

表空间相对文件号为 4,通过以下语句查询具体对应哪个文件

system@ORA11G> select file_name,tablespace_name from dba_data_files where relative_fno=4;

FILE_NAMETABLESPACE_NAME
---------------- -------------------
/home/u01/app/oracle/oradata/ora11g/users01.dbf USERS

利用这些信息可以查看 dump 文件信息,具体操作方法请参考新浪博客的这篇博文。

Oracle Database SQL Language Reference 笔记(3)—— 伪列(续)相关推荐

  1. Oracle PL/SQL 程序设计读书笔记 - 第7章 使用数据

    Oracle PL/SQL 程序设计读书笔记 - 第7章 使用数据 Oracle PL/SQL 程序设计读书笔记 - 第7章 使用数据 7.1 程序数据的命名 PL/SQL要求在给数据结构命名的时候应 ...

  2. Oracle PL/SQL 程序设计读书笔记 - 第14章 DML和事务管理

    Oracle PL/SQL 程序设计读书笔记 - 第14章 DML和事务管理 Oracle PL/SQL 程序设计读书笔记 - 第14章 DML和事务管理 ACID原则:即一个事务具有原子性.一致性. ...

  3. 浅析SQL Server数据库中的伪列以及伪列的含义

    浅析SQL Server数据库中的伪列以及伪列的含义 原文:浅析SQL Server数据库中的伪列以及伪列的含义 本文出处:http://www.cnblogs.com/wy123/p/6833116 ...

  4. oracle pl/sql 程序设计 历史笔记整理

    20131016 周三 oracle pl/sql 程序设计 第2章 创建并运行pl/sql代码 sqlplus yjkhecc/yjkhecc@10.85.23.92:1521/orcl 在java ...

  5. Oracle数据库(索引、视图、伪列与伪表)

    引用推荐博客.数据库网址 http://www.educity.cn/shujuku/1598602.html(希赛数据库学院) http://blog.csdn.net/kingzone_2008/ ...

  6. oracle sql last_value,図でイメージするOracle DatabaseのSQL全集 第3回 分析関数

    指定したソートキーでの.最初の行の値を求めるのが.First_Value関数. 指定したソートキーでの.最後の行の値を求めるのが.Last_Value関数. 指定したソートキーでの.(Row_Numb ...

  7. Oracle PL/SQL编程学习笔记:Merge方法的使用

    Oracle11g的Merge很强大! 1 create or replace procedure BRANCE_REPORT_MERGE is 2 3 begin 4 Merge into BRAN ...

  8. Oracle PL/SQL编程学习笔记:游标

    游标参考:http://www.cnblogs.com/sc-xx/archive/2011/12/03/2275084.html 1 create or replace procedure REGI ...

  9. SQL反模式笔记7——多列属性

    目标:存储多值属性 反模式:创建多个列.比如产品主图,开始需求是,每个产品都是3张图,但随着时间的推移,可能就不止3张了. 1.查询:多个列的话,查询时可能不得不用IN,或者多个OR 2.添加.删除. ...

最新文章

  1. Redis优化MySQL
  2. Linux下查找、删除、替换命令
  3. ELF格式解析库之提取信息
  4. (转载)VS2010/MFC编程入门之四(MFC应用程序框架分析)
  5. Chart控件X轴显示不全的解决方法
  6. AI Challenger全球AI挑战赛开幕,300万奖金池,还可能获李开复投资
  7. 第1章 别让医生欺负你
  8. 调整Redmine的用户显示格式
  9. 记一次spring MVC项目后台重构(持续更新)
  10. Spring Cloud Data Flow简介
  11. jzxx1105 【入门】字符图形4-星号正三角
  12. Java设计模式鸭子模式_[JS设计模式]:鸭子类型与多态
  13. Git拉取远程最新代码,并与当前分支合并
  14. 复合函数的间断点问题总结
  15. 微电子新手入门之 Origin画图
  16. 【2011年全国试题3】已知循环队列存储在一维数组A[0…n-1],且队列非空时,front和rear分别指向队头元素和队尾元素。若初始时队列为空,且
  17. 市场研究中的数据分析知识整理 (七)-结构方程模型
  18. 计算机病毒按危害程度分类可分为,计算机病毒按其危害程度可分为
  19. 【全球软件大会】华为前端工程师分享:华为云官网的智能化实践
  20. ESI.ProCAST.2014.0..Visual-Environment.v9.6.Linux64 1DVD铸造模拟软件

热门文章

  1. 爬虫实战1:爬取糗事百科段子
  2. 德州扑克 java 算法_德州扑克算法幕后研发者:AI如何打败顶级人类牌手?
  3. 微凉编程助手 v1.08官方版
  4. STM32的AD转换
  5. 恒大造车,从来都不是梦
  6. 互联网协议入门(一) 作者:阮一峰
  7. 文件名伪装_RLO(红队钓鱼)
  8. 软件测试自动化验证码,借助 OCR,协助绕过 web 自动化测试中一些简单验证码问题。...
  9. Simulink Data Type Conversion模块使用笔记
  10. 易拉罐真的能增强WiFi信号!笔记本手机都适用