sql >> Base de Datos >  >> RDS >> Oracle

Cómo usar ora_hash en una columna de tipo de datos xmltype

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