在oracle函数中,我们是否有类似的校验和功能(SQL)。我想把它存储在一个表中,并在更新语句中使用keyvalue。我目前的一个流程包含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
这在Oracles里有记载 SQL语言参考.