2011-07-01 65 views
2

假設我有一個有兩列的oracle表:type varchar2和data varchar2。我想知道在plsql或直接oracle sql中是否有一種有效的方法來計算所有數據列(理想情況下sha1,但md5或自定義Oracle哈希函數是可接受的)的散列。例如,一個mysql實施解決方案可能是:跨行Oracle哈希數據

mysql dialect query: 
select type, sha1(group_concat(data order by data separator '')) data_hash from my_table group by type 

example output:  
+------+------------------------------------------+ 
| type | data_hash        | 
+------+------------------------------------------+ 
| a | dbe343bfc23545c72f11fc7d2433df3263a71d0d | 
| b | b2baee034a7ed3aa1fa1bd441e141909f1b2f57c | 
+------+------------------------------------------+ 

我寧願在其他哈希在光標迭代直查詢,SHA1。

+0

嗯?行不能有不同的類型 - 我認爲你已經混淆了行和列。 – symcbean

+0

我打算說專欄,讓我解決這個問題,謝謝。 –

回答

2

你可以嘗試

SELECT type, SUM(ORA_HASH(data)) FROM my_table GROUP BY type 

甲骨文確實有一個收集,但不與ORA_HASH工作。在11g中,您可以做

select deptno, ora_hash(listagg(ename) within group (order by ename)) 
from emp 
group by deptno 
+0

如果您想要sha1,請查看dbms_crypto(http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_crypto.htm)。 –

0

看我爲getMD5功能here答案。也可以查看其他人提到的DBMS_CRYPTO,它使用較老的模糊工具包,但方法相同。

做你的更新,是這樣的:

update my_table 
set my_hash = getMD5(col1 || col2 || col3); 
+0

這並沒有幫助獲得整合系列中所有數據的散列(但是我沒有downvote,因爲您提供了一些有用的鏈接:) – symcbean