Jak již víte, ora_hash
nepřijímá long
nebo hodnoty LOB. Můžete předat prvních 4 kB nebo 32 kB obsahu XML, ale pokud se potřebujete ujistit, že se nezměnil celý dokument XML, nebude to stačit. A jak Ben zmínil, ora_hash
má maximum 4294967295 bucketů, takže kolize jsou pravděpodobnější než u SHA-1 nebo MD5. Jak uvádí dokumentace, ora_hash
'je užitečné pro operace, jako je analýza podmnožiny dat a generování náhodného vzorku'.
Můžete použít dbms_crypto
balíček k hašování celé hodnoty XMLType jako CLOB extrahovaný pomocí getClobVal
s funkcí wrapper pro snazší použití:
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;
/
Poté můžete předat svůj XMLType jako hodnotu nebo jako sloupec jako součást select:
select my_hash(xml) from t42;
MY_HASH(XML)
---------------------------------------------
494C4E7688963BCF312B709B33CD1B5CCA7C0289