oracle - Oracle PL/SQL 中的校验和
问题描述
我们在 oracle 函数中是否有类似的校验和函数 (SQL)。我会将它存储在一个表中并使用键/值来更新语句。我当前的流程之一包含 15 列,需要检查源和目标之间是否存在任何更改,而不是一列检查是否发生更改,希望表中有单列来帮助 15 中是否发生更改列
解决方案
数据库擅长跟踪变化,这就是它们的用途。
也许内置的ORA_ROWSCN
对于您的更改跟踪来说已经足够好了?默认情况下,它仅跟踪每个块的更改,但您可以使用 -odlyly named - 子句启用表来跟踪每一行的更改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 Language Reference中。
推荐阅读
- r - CSV 中的变量需要在 R 中转换为时间
- dynamic-pivot - 将行透视到列:多个列,没有聚合,没有硬编码值,每个主列未知 # 行
- postgresql - 在 Postgresql 中创建一百万条记录的最快方法?
- spring-boot - 自定义 DefaultClientCredentialsTokenResponseClient 时访问请求属性时无线程绑定请求
- c++ - 关闭程序时 TOpenDialog 中的异常
- javascript - 如何根据所选值显示内容反应
- c - 如何从采用浮点输入的函数中输出十六进制值
- javascript - 如何将 ng-content 与 ng-container 一起使用?
- reactjs - 可重用组件结构(react native)
- python - 如何在 QHorizontalBarSeries/QChart 上的指定 x 值处绘制垂直线?