Som du allerede ved, ora_hash
accepterer ikke long
eller LOB-værdier. Du kan sende de første 4k eller 32k af XML-indholdet, men hvis du skal sikre dig, at hele XML-dokumentet ikke er ændret, vil det ikke være tilstrækkeligt. Og som Ben nævnte, ora_hash
har et maksimum på 4294967295 skovle, så kollisioner er mere sandsynlige end med SHA-1 eller MD5. Som dokumentationen siger, ora_hash
'er nyttigt til operationer såsom at analysere en delmængde af data og generere en tilfældig stikprøve'.
Du kan bruge dbms_crypto
pakke til at hash hele XMLType-værdien, som en CLOB udtrukket med getClobVal
funktion, med en indpakningsfunktion for at gøre det nemmere at bruge:
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 derefter indsætte din XMLType, som en værdi eller som en kolonne som en del af et udvalg:
select my_hash(xml) from t42;
MY_HASH(XML)
---------------------------------------------
494C4E7688963BCF312B709B33CD1B5CCA7C0289