Jak już wiesz, ora_hash
nie akceptuje long
lub wartości LOB. Możesz przekazać pierwsze 4k lub 32k zawartości XML, ale jeśli chcesz się upewnić, że cały dokument XML nie uległ zmianie, to nie wystarczy. I jak wspomniał Ben, ora_hash
ma maksymalnie 4294967295 kubełków, więc kolizje są bardziej prawdopodobne niż w przypadku SHA-1 lub MD5. Jak mówi dokumentacja, ora_hash
„przydaje się do operacji takich jak analiza podzbioru danych i generowanie losowej próbki”.
Możesz użyć dbms_crypto
pakiet do mieszania całej wartości XMLType, jako CLOB wyodrębniony za pomocą getClobVal
funkcja, z funkcją opakowującą, aby była prostsza w użyciu:
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;
/
Następnie możesz przekazać swój XMLType jako wartość lub jako kolumnę jako część wyboru:
select my_hash(xml) from t42;
MY_HASH(XML)
---------------------------------------------
494C4E7688963BCF312B709B33CD1B5CCA7C0289