Oracle 11g:表校验和或散列

时间:2018-06-14 12:07:39

标签: sql hash plsql oracle11g checksum

我想对实现不同方法的不同视图做一个校验和,假设每个视图都没有重复,并且具有完全相同的列。(

问题

  1. 计算表校验和或散列的最简单方法是什么?
  2. 如果2个表相同,那么校验和是在Oracle中进行比较的唯一方法吗?
  3. 注意: 谷歌搜索我发现了一些旧的答案,如this one

1 个答案:

答案 0 :(得分:1)

  

如果2个表相同,那么校验和是在Oracle中进行比较的唯一方法吗?

不,因为您没有重复项,您可以使用MINUS运算符:

SELECT * FROM Table1
MINUS
SELECT * FROM Table2

将返回Table1Table2中不存在的所有行Table1。如果返回零行,则Table2中的所有行也存在于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 ) 中。

如果您想在两个方向检查表格,那么:

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

同样,如果没有返回任何行,则表格相同。

如果您要将表与重复项进行比较,并希望每个表中的重复行数相同,那么您可以使用以下内容:

username