Oracle PL / SQL中的校验和

问题描述 投票:1回答:1

我们在oracle函数中是否具有类似的校验和函数(SQL)。我将其存储在表中,并使用键/值进行更新。我当前的流程之一包含15列,需要检查源和目标之间是否有任何更改,而不是一一检查是否发生了更改,而是希望表中有单个列来帮助15中是否发生了更改列

oracle oracle11g oracle10g
1个回答
0
投票

数据库擅长跟踪更改,这就是它们的目的。

也许内置的ORA_ROWSCN足以满足您的更改跟踪需求?默认情况下,它仅跟踪每个块的更改,但是您可以使表通过-奇怪地命名-子句ROWDEPENDENCIES

来跟踪每一行的更改。
CREATE TABLE t (
 a NUMBER, 
 b NUMBER, 
 c NUMBER
) ROWDEPENDENCIES;


INSERT INTO t VALUES (1,1,1);
INSERT INTO t VALUES (2,2,2);
SELECT current_scn FROM v$database;
2380496

一段时间后:

UPDATE t SET b=20, c=20 WHERE a=2;
SELECT current_scn FROM v$database;
2380665

现在您可以查询每行被更改的系统更改号SCN:

SELECT ORA_ROWSCN AS scn, a,b,c FROM t;
SCN       A    B    C    
2380496   1    1    1
2380665   2   20   20

过去5天,Oracle可以将SCN转换为近似实时(在Oracle中为10±5分钟,在Oracle中为11±3秒):

SELECT ORA_ROWSCN AS SCN, SCN_TO_TIMESTAMP(ORA_ROWSCN) AS ts, a,b,c FROM t;
SCN       TS                    A    B    C    
2380496   2020-05-15 20:20:38   1    1    1
2380665   2020-05-15 20:23:06   2   20   20

已在Oracle SQL Language Reference中记录。

© www.soinside.com 2019 - 2024. All rights reserved.