Oracle 11g:table 校验和或哈希
Oracle 11g: table checksum or hash
我想对不同的视图执行校验和,执行不同的方法应该会产生相同的结果(假设每个视图不包含重复项并且具有完全相同的列)。
问题
- 计算 table 校验和或散列的最简单方法是什么?
- 如果 2 table 相同,校验和是 Oracle 中比较的唯一方法吗?
注意:
谷歌搜索我发现了一些旧答案,例如 this one.
Is a checksum the only way to compare in Oracle if 2 tables are identical ?
不,因为你没有重复项,你可以使用 MINUS
运算符:
SELECT * FROM Table1
MINUS
SELECT * FROM Table2
将 return Table1
中不存在于 Table2
中的所有行。如果零行被 returned 那么 Table1
中的所有行也存在于 Table2
.
中
如果您想检查两个方向的 table,则:
SELECT *
FROM (
SELECT t1.*, 'T1' AS "WHERE" FROM Table1 t1
MINUS
SELECT t2.*, 'T1' FROM Table2 t2
)
UNION ALL
(
SELECT t2.*, 'T2' FROM Table2 t2
MINUS
SELECT t1.*, 'T2' FROM Table1 t1
)
同样,如果没有行被 return 编辑,那么 table 是相同的。
如果您将 table 与重复项进行比较,并且希望每个 table 中的重复行数相同,那么您可以使用类似的东西:
SELECT Col1, Col2, Col3, /*...*/ ColN,
ROW_NUMBER() OVER ( PARTITION BY Col1, Col2, Col3, /*...*/ ColN ORDER BY ROWNUM )
AS rn
FROM table1
MINUS
SELECT Col1, Col2, Col3, /*...*/ ColN,
ROW_NUMBER() OVER ( PARTITION BY Col1, Col2, Col3, /*...*/ ColN ORDER BY ROWNUM )
AS rn
FROM table2
我想对不同的视图执行校验和,执行不同的方法应该会产生相同的结果(假设每个视图不包含重复项并且具有完全相同的列)。
问题
- 计算 table 校验和或散列的最简单方法是什么?
- 如果 2 table 相同,校验和是 Oracle 中比较的唯一方法吗?
注意: 谷歌搜索我发现了一些旧答案,例如 this one.
Is a checksum the only way to compare in Oracle if 2 tables are identical ?
不,因为你没有重复项,你可以使用 MINUS
运算符:
SELECT * FROM Table1
MINUS
SELECT * FROM Table2
将 return Table1
中不存在于 Table2
中的所有行。如果零行被 returned 那么 Table1
中的所有行也存在于 Table2
.
如果您想检查两个方向的 table,则:
SELECT *
FROM (
SELECT t1.*, 'T1' AS "WHERE" FROM Table1 t1
MINUS
SELECT t2.*, 'T1' FROM Table2 t2
)
UNION ALL
(
SELECT t2.*, 'T2' FROM Table2 t2
MINUS
SELECT t1.*, 'T2' FROM Table1 t1
)
同样,如果没有行被 return 编辑,那么 table 是相同的。
如果您将 table 与重复项进行比较,并且希望每个 table 中的重复行数相同,那么您可以使用类似的东西:
SELECT Col1, Col2, Col3, /*...*/ ColN,
ROW_NUMBER() OVER ( PARTITION BY Col1, Col2, Col3, /*...*/ ColN ORDER BY ROWNUM )
AS rn
FROM table1
MINUS
SELECT Col1, Col2, Col3, /*...*/ ColN,
ROW_NUMBER() OVER ( PARTITION BY Col1, Col2, Col3, /*...*/ ColN ORDER BY ROWNUM )
AS rn
FROM table2