私はいくつかのテーブルを持っており、すべての行のハッシュ値を取得したい(このカラムは任意の日付タイプにすることができます)。各表は異なるスキーマを持つことがあります。以下はテストのためのものです。 get_sha1_hash
を実装する方法Oracleの行を文字列にシリアル化し、ハッシュ値を取得しますか?
select *,
get_sha1_hash(a, b, c, x) Hash -- Get the Sha1 hash of columns a, b, c, x
from (
select 1 a, 2 b, 3.1 c, 'aa' x from dual union all
select 4 a, 5 b, 6.3 c, 'bb' from dual union all
select 1 a, 2 b, 9.9 c, 'cc' from dual) t
?次は十分ですか?
select ora_hash(a || b || c || x) from t
最大32768文字(最大varchar2)を連結します。また、あなたが何を求めているのか分かりませんが、 'ORA_HASH'は' SHA1'ハッシュではありません。 SHA1が必要な場合は、DBMS_CRYPTOを使用する必要があります。 https://stackoverflow.com/questions/1749753/making-a-sha1-hash-of-a-row-in-oracle – kfinity
SHA1を使いたかったのです。ただし、十分な場合はORA_hashを使用できます。私は、ハッシュコードを比較することによって日々の変化を監視する必要があります。 – ca9163d9
ORA_HASHは32ビットのハッシュ関数なので、〜9,000の一意の行を取得すると、衝突確率は約1%になります。 SHA1は160ビットなので、何十億行もある場合でも、衝突の可能性は非常に低くなります。だから、それはあなたの状況によって異なります。 – kfinity