Flashback Version Query也是以SELECT子句的形式調(diào)用,其用法并不比AS OF復(fù)雜,與其類似,只需要在標(biāo)準SELECT查詢后面附加VERSIONS BETWEEN TIMESTAMP[/SCN] START AND END子句即可。通過VERSIONS BETWEEN能夠查看指定時間段內(nèi)UNDO表空間中記錄的不同版本(注意,只包括被提交的記錄)。記錄在Version Query中可能會是一對多的關(guān)系,如某些記錄如果被修改過多次并分別提交,那么在查詢的時候,如果修改的操作是在指定的時間段(或SCN)內(nèi)進行的,則記錄每次修改的結(jié)果都會被顯示出來,這倒是比較有利于我們對數(shù)據(jù)的修改進行對比,查看數(shù)據(jù)究竟是如何變化的。
Version Query中提供了多個偽列,如表所示。
表 Flashback Query中Version Query的偽列說明
VERSIONS_STARTSCN |
該條記錄操作時的SCN或時間,如果為空,表示該行記錄是在查詢范圍外創(chuàng)建的 |
VERSIONS_ENDSCN VERSIONS_ENDTIME |
該條記錄失效時的SCN或時間,如果為空,說明記錄當(dāng)前時間在當(dāng)前表內(nèi)不存在,或者已經(jīng)被刪除了,可以配合著VERSIONS_OPERATION列來看,如果VERSIONS_OPERATION列值為D,說明該列已被刪除,如果該列為空,則說明記錄在這段時間無操作 |
VERSIONS_XID |
該操作的事務(wù)ID |
VERSIONS_OPERATION |
對該行執(zhí)行的操作:I表示INSERT,D表示DELETE,U表示UPDATE 提示:對于索引鍵的update操作,版本查詢可能會將其識別成兩個操作:DELETE和INSERT |
相關(guān)知識點:
什么是偽列?我們都知道在創(chuàng)建表時必須指定列名、列類型等信息,這些顯式指定的列就是標(biāo)準的列,在查詢時這些列能夠被SELECT語句顯示出來。除此之外,還有一種列類型,這些列并不存在于表定義中,如你通過DESC TBLNAME查看時看不到這些列的定義,但通過SELECT語句卻可以查詢這些列的內(nèi)容,這種列就是Oracle提供的偽列(如SYSDATE之類系統(tǒng)函數(shù)不是偽列)。
偽列也并不是在任何查詢時都適用,有些列只有特殊的查詢語句中才能夠顯示,如上述表格中提供的6列就僅在使用Versions Query時才能夠調(diào)用。除此之外還有一些比較常用的ROWNUM、LEVEL等。