Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

SQL Server:RowVersion tương đương trong Oracle

Oracle có SCN (Số thay đổi hệ thống): http://docs.oracle.com/cd/E11882_01/server.112/e10713/transact.htm#CNCPT039


Sử dụng một cột giả ORA_ROWSCN để kiểm tra SCN hiện tại của các hàng:
http://docs.oracle.com/cd/B28359_01/server.111/b28286/pseudocolumns007.htm#SQLRF51145

Một ví dụ:

SELECT ora_rowscn, t.* From test t;

Demo -> http://www.sqlfiddle.com/#!4/535bc / 1
(Trên SQLFiddle các cam kết rõ ràng dường như không hoạt động - trên cơ sở dữ liệu thực, mỗi cam kết sẽ tăng SCN).


Ví dụ về cơ sở dữ liệu "thực":

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 

Nếu biết SCN của giao dịch, chúng ta có thể sử dụng truy vấn hồi tưởng để lấy giá trị trong quá khứ của hàng:
http://docs.oracle.com/cd/B28359_01/appdev.111/b28424/adfns_flashback.htm#g1026131

Một ví dụ:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle:Có cách nào để lấy lỗi cú pháp SQL gần đây không?

  2. Gặp lỗi khi thực hiện quy trình từ nhà phát triển sql

  3. Java:Oracle XMLType + JDBC

  4. Lỗi (ORA-00923:Không tìm thấy từ khóa FROM ở nơi mong đợi)

  5. Cách chỉ định điều kiện OUTER JOIN tùy chọn trong Oracle 8i