Oracle PLSQL中的校验和

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

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

这在Oracles里有记载 SQL语言参考.

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