2012-08-06 31 views
1

我在想,根據我所做的實驗,答案是否定的。但是我不確定我是否正確地做着事情。Oracle dbms_utilities.get_hash_value總是爲不同的輸入返回唯一值嗎?

我的功能是:

select buyer_key, DBMS_UTILITY.get_hash_value(buyer_key||'|'||buyer_entity_id||'|'||buyer_io_id||'|'||buyer_line_item_id||'|'||is_billing_enabled||'|'||currency_id_b_trgt||'|'||currency_id_b_prfrd||'|'||ymdh_max,1,POWER(2,16)-1) as hashvalue from network_buyer_dim order by hashvalue asc; 

當我運行它,它會返回與重複hashkey值無數行。但是,當我到數據庫並查看這些行(順便說一下,每個buyer_key都是唯一的)時,我看到這些行不包含相同的值。

我是否正確調用該函數?

+0

文檔說的一件事是使用大小爲2的冪(您正在使用2減2的冪)。 http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/d_util.htm#autoId33 – Glenn 2012-08-06 21:06:17

+0

我一定錯了,因爲我的實際代碼使用減1 – 2012-08-07 16:36:14

回答

3

顯然不是!

hash function器是將可變長度的大 數據集,稱爲鍵,以更小的數據集的 固定長度的任何算法或子程序。例如,具有可變長度的人姓名 可以被散列爲單個整數。由散列 函數返回的值稱爲散列值,散列碼,散列總和,校驗和或簡單散列。

這意味着如果輸入域集合的大小大於輸出域集合的大小,則存在重複。

除此之外,最好的散列函數被認爲是那些傾向於爲所有可能的輸入值給出相同數量的重複輸出值的散列函數。

+0

我有一個偷偷摸摸的預感,輸入域的大小是輸出域大小太大。在發佈這個問題之前,我嘗試使用2^32-1,但Oracle函數拒絕了這個問題。 – 2012-08-07 16:37:52

相關問題