sql >> データベース >  >> RDS >> Oracle

SQL Server:Oracleで同等のRowVersion

    OracleにはSCN(システム変更番号)があります: http: //docs.oracle.com/cd/E11882_01/server.112/e10713/transact.htm#CNCPT039


    ORA_ROWSCN疑似列を使用して、行の現在のSCNを調べます。
    http://docs.oracle.com/cd/B28359_01/server.111/b28286/pseudocolumns007.htm#SQLRF51145

    例:

    SELECT ora_rowscn, t.* From test t;
    

    デモ-> http://www.sqlfiddle.com/#!4/535bc / 1
    (SQLFiddleでは、明示的なコミットは明らかに機能しません。実際のデータベースでは、コミットするたびにSCNが増加します。)


    「実際の」データベースの例:

    CREATE TABLE test(
      id int,
      value int
    );
    
    INSERT INTO test VALUES(1,0);
    COMMIT;
    SELECT ora_rowscn, t.* FROM test t;
    
    ORA_ROWSCN         ID      VALUE
    ---------- ---------- ----------
       3160728          1          0
    
    UPDATE test SET value = value + 1 WHERE id = 1;
    COMMIT;
    SELECT ora_rowscn, t.* FROM test t;
    
    ORA_ROWSCN         ID      VALUE
    ---------- ---------- ----------
       3161657          1          1
    
    UPDATE test SET value = value + 1 WHERE id = 1;
    COMMIT;
    SELECT ora_rowscn, t.* FROM test t;
    
    ORA_ROWSCN         ID      VALUE
    ---------- ---------- ----------
       3161695          1          2 
    

    トランザクションのSCNがわかっている場合は、フラッシュバッククエリを使用して、行の過去の値を取得できます。
    http://docs.oracle.com/cd/B28359_01/appdev.111/b28424/adfns_flashback.htm#g1026131

    例:

    SELECT t.*,
           versions_startscn, versions_starttime,
           versions_endscn, versions_endtime,
           versions_xid, versions_operation
    FROM test VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE t;
    
            ID      VALUE VERSIONS_STARTSCN VERSIONS_STARTTIME  VERSIONS_ENDSCN VERSIONS_ENDTIME    VERSIONS_XID     VERSIONS_OPERATION
    ---------- ---------- ----------------- ------------------- --------------- ------------------- ---------------- ------------------
             1          2           3161695 13/12/10 08:19:39                                       06000300EA070000 U                  
             1          1           3161657 13/12/10 08:18:39           3161695 13/12/10 08:19:39   06001200EA070000 U                  
             1          0                                               3161657 13/12/10 08:18:39                         
    
    
    SELECT t.*,
           versions_startscn, versions_starttime,
           versions_endscn, versions_endtime,
           versions_xid, versions_operation
    FROM test VERSIONS BETWEEN SCN 3161657 AND 3161657 t;
    
            ID      VALUE VERSIONS_STARTSCN VERSIONS_STARTTIME  VERSIONS_ENDSCN VERSIONS_ENDTIME    VERSIONS_XID     VERSIONS_OPERATION
    ---------- ---------- ----------------- ------------------- --------------- ------------------- ---------------- ------------------
             1          1           3161657 13/12/10 08:18:39                                       06001200EA070000 U                               
    


    1. Oracle 18cでjsonを効率的に解析する方法は?

    2. フィールドがNULLであるか、フィールドの日付値が別の日付より大きくない日付を選択するためのMySQLクエリ

    3. 範囲からテーブルに値を自動挿入

    4. SQL 2008 のインデックスのないテーブルのリスト