Como ya sabes, ora_hash
no acepta long
o valores LOB. Puede pasar los primeros 4k o 32k del contenido XML, pero si necesita asegurarse de que todo el documento XML no haya cambiado, eso no será suficiente. Y como mencionó Ben, ora_hash
tiene un máximo de 4294967295 cubos, por lo que las colisiones son bastante más probables que con SHA-1 o MD5. Como dice la documentación, ora_hash
'es útil para operaciones como analizar un subconjunto de datos y generar una muestra aleatoria'.
Puede usar el dbms_crypto
paquete para codificar todo el valor XMLType, como un CLOB extraído con getClobVal
función, con una función contenedora para que sea más fácil de usar:
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;
/
Luego puede pasar su XMLType, como un valor o como una columna como parte de una selección:
select my_hash(xml) from t42;
MY_HASH(XML)
---------------------------------------------
494C4E7688963BCF312B709B33CD1B5CCA7C0289