2011-07-01 9 views
2

2つの列を持つOracle表があるとします。varchar2とdata varchar2を入力します。私はすべてのデータ列(理想的にはsha1ですが、md5またはカスタムOracleのハッシュ関数が受け入れられる)上でハッシュを計算するには、plsqlまたはまっすぐなoracle sqlでいくらか効率的な方法があるかどうかを知りたいと思います。私はカーソルの反復にわたり均等クエリを好む、および他のハッシュオーバーSHA1思い行間の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 | 
+------+------------------------------------------+ 

:たとえば、ソリューションのMySQLの実装は、次のようになります。

+0

え:

は何かのように、あなたのアップデートを行うには?行は異なる型を持つことはできません - 私はあなたが行と列を混同していると思います。 – symcbean

+0

私は列を言うことを意味しました。 –

答えて

2

あなたはCOLLECTを持って

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

Oracleはない試みることができるが、それは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

関連する問題