Oracle record history using as of timestamp within a range

前端 未结 3 1004
小鲜肉
小鲜肉 2021-01-06 12:19

I recently learnt that oracle has a feature which was pretty useful to me - as the designer/implementator didn\'t care much about data history - I can query the historical s

3条回答
  •  半阙折子戏
    2021-01-06 12:26

    Yes, like this:

    SQL> select sal from emp where empno=7369;
    
           SAL
    ----------
          5800
    
    SQL> update emp set sal = sal+100 where empno=7369;
    
    1 row updated.
    
    SQL> commit;
    
    Commit complete.
    
    SQL> update emp set sal = sal-100 where empno=7369;
    
    1 row updated.      
    
    SQL> commit;
    
    Commit complete.
    
    SQL> select empno, sal, versions_starttime,versions_xid
      2  from emp
      3  versions between timestamp sysdate-1 and sysdate
      4  where empno=7369;
    
         EMPNO        SAL VERSIONS_STARTTIME                                                          VERSIONS_XID
    ---------- ---------- --------------------------------------------------------------------------- --
          7369       5900 11-DEC-08 16.05.32                                                          0014001300002A74
          7369       5800 11-DEC-08 16.03.32                                                          000D002200012EB1
          7369       5800
    

    Note that how far back you can go is limited by the UNDO_RETENTION parameter, and will typically be hours rather than days.

提交回复
热议问题