ご存知のとおり、ora_hash
long
を受け入れません またはLOB値。 XMLコンテンツの最初の4kまたは32kを渡すこともできますが、XMLドキュメント全体が変更されていないことを確認する必要がある場合は、それだけでは不十分です。そしてベンが述べたように、ora_hash
最大4294967295バケットがあるため、SHA-1またはMD5よりも衝突が発生する可能性が高くなります。ドキュメントに記載されているように、ora_hash
'データのサブセットの分析やランダムサンプルの生成などの操作に役立ちます'。
dbms_crypto
を使用できます getClobVal
で抽出されたCLOBとして、XMLType値全体をハッシュするパッケージ 関数、使いやすくするためのラッパー関数付き:
create or replace function my_hash(xml xmltype) return raw is
begin
return dbms_crypto.hash(src=>xml.getclobval(), typ=>dbms_crypto.hash_sh1);
end;
/
次に、XMLTypeを値として、またはselectの一部として列として渡すことができます:
select my_hash(xml) from t42;
MY_HASH(XML)
---------------------------------------------
494C4E7688963BCF312B709B33CD1B5CCA7C0289