我们在oracle函数中是否具有类似的校验和函数(SQL)。我将其存储在表中,并使用键/值进行更新。我当前的流程之一包含15列,需要检查源和目标之间是否有任何更改,而不是一一检查是否发生了更改,而是希望表中有单个列来帮助15中是否发生了更改列
数据库擅长跟踪更改,这就是它们的目的。
也许内置的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中记录。