<p style="font-family:微软雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;">
标准Flashback Query的功能是查询过去某个时间点对象中保存的记录信息,在当前时间与指定的过去某个时间点之间,对象可能做过多次修改,如果希望看到这期间的每一次修改,Oracle提供了Flashback Version Query。
</p>
<p style="font-family:微软雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;">
Flashback Version Query也是以SELECT子句的形式调用,其用法并不比AS OF复杂,与其类似,只需要在标准SELECT查询后面附加<b style="background-color:inherit;">VERSIONS BETWEEN TIMESTAMP[/SCN] START AND END</b>子句即可。通过VERSIONS BETWEEN能够查看指定时间段内UNDO表空间中记录的不同版本(<b style="background-color:inherit;">注意,只包括被提交的记录</b>)。记录在Version Query中可能会是一对多的关系,如某些记录如果被修改过多次并分别提交,那么在查询的时候,如果修改的操作是在指定的时间段(或SCN)内进行的,则记录每次修改的结果都会被显示出来,这倒是比较有利于我们对数据的修改进行对比,查看数据究竟是如何变化的。
</p>
<p style="font-family:微软雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;">
<br />
</p>
<p style="font-family:微软雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;">
Version Query中提供了多个伪列,如表所示。
</p>
<p style="font-family:微软雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;">
表 Flashback Query中Version Query的伪列说明
</p>
<div style="font-family:微软雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;">
<table border="1" cellpadding="2" cellspacing="0" style="font-size:inherit;margin-top:10px;margin-bottom:10px;width:607px;background-color:inherit;">
<tbody style="background-color:inherit;">
<tr style="background-color:inherit;">
<td style="word-break:break-all;border:1px solid #999999;padding:5px 16px 5px 12px;min-height:25px;min-width:25px;height:25px;background-color:inherit;width:164px;">
<p style="background-color:inherit;">
<span lang="EN-US" style="background-color:inherit;"><span style="background-color:inherit;">VERSIONS_STARTSCN<br style="background-color:inherit;" />
VERSIONS_STARTTIME</span></span>
</p>
</td>
<td style="word-break:break-all;border:1px solid #999999;padding:5px 16px 5px 12px;min-height:25px;min-width:25px;height:25px;background-color:inherit;width:401px;">
<p style="background-color:inherit;">
<span style="background-color:inherit;">该条记录操作时的<span lang="EN-US" style="background-color:inherit;">SCN</span>或时间,如果为空,表示该行记录是在查询范围外创建的</span>
</p>
</td>
</tr>
<tr style="background-color:inherit;">
<td style="word-break:break-all;border:1px solid #999999;padding:5px 16px 5px 12px;min-height:25px;min-width:25px;height:25px;background-color:inherit;width:164px;">
<p style="background-color:inherit;">
<span lang="EN-US" style="background-color:inherit;"><span style="background-color:inherit;">VERSIONS_ENDSCN</span></span>
</p>
<p style="background-color:inherit;">
<span lang="EN-US" style="background-color:inherit;"><span style="background-color:inherit;">VERSIONS_ENDTIME</span></span>
</p>
</td>
<td style="word-break:break-all;border:1px solid #999999;padding:5px 16px 5px 12px;min-height:25px;min-width:25px;height:25px;background-color:inherit;width:401px;">
<p style="background-color:inherit;">
<span style="background-color:inherit;">该条记录失效时的<span lang="EN-US" style="background-color:inherit;">SCN</span>或时间,如果为空,说明记录当前时间在当前表内不存在,或者已经被删除了,可以配合着<span lang="EN-US" style="background-color:inherit;">VERSIONS_OPERATION</span>列来看,如果<span lang="EN-US" style="background-color:inherit;">VERSIONS_OPERATION</span>列值为<span lang="EN-US" style="background-color:inherit;">D</span>,说明该列已被删除,如果该列为空,则说明记录在这段时间无操作</span>
</p>
</td>
</tr>
<tr style="background-color:inherit;">
<td style="word-break:break-all;border:1px solid #999999;padding:5px 16px 5px 12px;min-height:25px;min-width:25px;height:25px;background-color:inherit;width:164px;">
<p style="background-color:inherit;">
<span lang="EN-US" style="background-color:inherit;"><span style="background-color:inherit;">VERSIONS_XID</span></span>
</p>
</td>
<td style="word-break:break-all;border:1px solid #999999;padding:5px 16px 5px 12px;min-height:25px;min-width:25px;height:25px;background-color:inherit;width:401px;">
<p style="background-color:inherit;">
<span style="background-color:inherit;">该操作的事务<span lang="EN-US" style="background-color:inherit;">ID</span></span>
</p>
</td>
</tr>
<tr style="background-color:inherit;">
<td style="word-break:break-all;border:1px solid #999999;padding:5px 16px 5px 12px;min-height:25px;min-width:25px;height:25px;background-color:inherit;width:164px;">
<p style="background-color:inherit;">
<span lang="EN-US" style="background-color:inherit;"><span style="background-color:inherit;">VERSIONS_OPERATION</span></span>
</p>
</td>
<td style="word-break:break-all;border:1px solid #999999;padding:5px 16px 5px 12px;min-height:25px;min-width:25px;height:25px;background-color:inherit;width:401px;">
<p style="background-color:inherit;">
<span style="background-color:inherit;">对该行执行的操作:<span lang="EN-US" style="background-color:inherit;">I</span>表示<span lang="EN-US" style="background-color:inherit;">INSERT</span>,<span lang="EN-US" style="background-color:inherit;">D</span>表示<span lang="EN-US" style="background-color:inherit;">DELETE</span>,<span lang="EN-US" style="background-color:inherit;">U</span>表示<span lang="EN-US" style="background-color:inherit;">UPDATE</span></span>
</p>
<p style="background-color:inherit;">
<span style="background-color:inherit;">提示:对于索引键的<span lang="EN-US" style="background-color:inherit;">update</span>操作,版本查询可能会将其识别成两个操作:<span lang="EN-US" style="background-color:inherit;">DELETE</span>和<span lang="EN-US" style="background-color:inherit;">INSERT</span></span>
</p>
</td>
</tr>
</tbody>
</table>
</div>
<p style="font-family:微软雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;">
<br />
</p>
<p style="font-family:微软雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;">
相关知识点:
</p>
<p style="font-family:微软雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;">
什么是伪列?<span style="background-color:inherit;line-height:1.5;">我们都知道在创建表时必须指定列名、列类型等信息,这些显式指定的列就是标准的列,在查询时这些列能够被SELECT语句显示出来。除此之外,还有一种列类型,这些列并不存在于表定义中,如你通过DESC TBLNAME查看时看不到这些列的定义,但通过SELECT语句却可以查询这些列的内容,这种列就是Oracle提供的伪列(如SYSDATE之类系统函数不是伪列)。</span>
</p>
<p style="font-family:微软雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;">
伪列也并不是在任何查询时都适用,有些列只有特殊的查询语句中才能够显示,如上述表格中提供的6列就仅在使用Versions Query时才能够调用。除此之外还有一些比较常用的ROWNUM、LEVEL等。
</p>
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341