簡體   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