繁体   English   中英

Oracle 11g:表校验和或哈希

[英]Oracle 11g: table checksum or hash

我想针对不同的视图执行校验和,以实现应该产生相同结果的不同方法(假设每个视图不包含重复项,并且具有完全相同的列)。

问题

  1. 计算表校验和或哈希的最简单方法是什么?
  2. 如果2个表相同,校验和是在Oracle中进行比较的唯一方法吗?

注意:在Google周围搜索时,我发现了一些旧答案,例如这个

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

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

SELECT * FROM Table1
MINUS
SELECT * FROM Table2

将返回所有来自行Table1中不存在Table2 如果返回零行,则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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM