ITPub博客

首页 > 数据库 > Oracle > ORACLE Flashback Query伪列

ORACLE Flashback Query伪列

原创 Oracle 作者:zr2095 时间:2015-10-09 15:31:33 0 删除 编辑

    标准Flashback Query的功能是查询过去某个时间点对象中保存的记录信息,在当前时间与指定的过去某个时间点之间,对象可能做过多次修改,如果希望看到这期间的每一次修改,Oracle提供了Flashback Version Query。

    Flashback Version Query也是以SELECT子句的形式调用,其用法并不比AS OF复杂,与其类似,只需要在标准SELECT查询后面附加VERSIONS BETWEEN TIMESTAMP[/SCN] START AND END子句即可。通过VERSIONS BETWEEN能够查看指定时间段内UNDO表空间中记录的不同版本(注意,只包括被提交的记录)。记录在Version Query中可能会是一对多的关系,如某些记录如果被修改过多次并分别提交,那么在查询的时候,如果修改的操作是在指定的时间段(或SCN)内进行的,则记录每次修改的结果都会被显示出来,这倒是比较有利于我们对数据的修改进行对比,查看数据究竟是如何变化的。


    Version Query中提供了多个伪列,如表所示。

    表     Flashback Query中Version Query的伪列说明

VERSIONS_STARTSCN
VERSIONS_STARTTIME

该条记录操作时的SCN或时间,如果为空,表示该行记录是在查询范围外创建的

VERSIONS_ENDSCN

VERSIONS_ENDTIME

该条记录失效时的SCN或时间,如果为空,说明记录当前时间在当前表内不存在,或者已经被删除了,可以配合着VERSIONS_OPERATION列来看,如果VERSIONS_OPERATION列值为D,说明该列已被删除,如果该列为空,则说明记录在这段时间无操作

VERSIONS_XID

该操作的事务ID

VERSIONS_OPERATION

对该行执行的操作:I表示INSERTD表示DELETEU表示UPDATE

提示:对于索引键的update操作,版本查询可能会将其识别成两个操作:DELETEINSERT


相关知识点:

    什么是伪列?我们都知道在创建表时必须指定列名、列类型等信息,这些显式指定的列就是标准的列,在查询时这些列能够被SELECT语句显示出来。除此之外,还有一种列类型,这些列并不存在于表定义中,如你通过DESC TBLNAME查看时看不到这些列的定义,但通过SELECT语句却可以查询这些列的内容,这种列就是Oracle提供的伪列(如SYSDATE之类系统函数不是伪列)。

伪列也并不是在任何查询时都适用,有些列只有特殊的查询语句中才能够显示,如上述表格中提供的6列就仅在使用Versions Query时才能够调用。除此之外还有一些比较常用的ROWNUM、LEVEL等。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30208428/viewspace-1813601/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-04-15

  • 博文量
    163
  • 访问量
    421527