Som du redan vet, ora_hash
accepterar inte long
eller LOB-värden. Du kan skicka in de första 4k eller 32k av XML-innehållet, men om du behöver se till att hela XML-dokumentet inte har ändrats räcker det inte. Och som Ben nämnde, ora_hash
har maximalt 4294967295 hinkar, så kollisioner är snarare mer sannolika än med SHA-1 eller MD5. Som dokumentationen säger, ora_hash
"är användbart för operationer som att analysera en delmängd av data och generera ett slumpmässigt urval".
Du kan använda dbms_crypto
paket för att hasha hela XMLType-värdet, som en CLOB extraherad med getClobVal
funktion, med en omslagsfunktion för att göra det enklare att använda:
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;
/
Du kan sedan skicka in din XMLType, som ett värde eller som en kolumn som en del av ett urval:
select my_hash(xml) from t42;
MY_HASH(XML)
---------------------------------------------
494C4E7688963BCF312B709B33CD1B5CCA7C0289