Zoals je al weet, ora_hash
accepteert niet long
of LOB-waarden. U kunt de eerste 4k of 32k van de XML-inhoud doorgeven, maar als u ervoor moet zorgen dat het hele XML-document niet is gewijzigd, is dat niet voldoende. En zoals Ben al zei, ora_hash
heeft een maximum van 4294967295 buckets, dus botsingen zijn eerder waarschijnlijk dan bij SHA-1 of MD5. Zoals de documentatie zegt, ora_hash
'is handig voor bewerkingen zoals het analyseren van een subset van gegevens en het genereren van een willekeurige steekproef'.
U kunt de dbms_crypto
. gebruiken pakket om de hele XMLType-waarde te hashen, als een CLOB geëxtraheerd met de getClobVal
functie, met een wrapper-functie om het gebruik eenvoudiger te maken:
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;
/
U kunt dan uw XMLType doorgeven, als waarde of als kolom als onderdeel van een select:
select my_hash(xml) from t42;
MY_HASH(XML)
---------------------------------------------
494C4E7688963BCF312B709B33CD1B5CCA7C0289