Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como usar ora_hash em uma coluna de tipo de dados xmltype


Como você já sabe, ora_hash não aceita long ou valores LOB. Você pode passar os primeiros 4k ou 32k do conteúdo XML, mas se precisar ter certeza de que todo o documento XML não foi alterado, isso não será suficiente. E como Ben mencionou, ora_hash tem um máximo de 4294967295 buckets, portanto, as colisões são mais prováveis ​​do que com SHA-1 ou MD5. Como diz a documentação, ora_hash 'é útil para operações como analisar um subconjunto de dados e gerar uma amostra aleatória'.

Você pode usar o dbms_crypto pacote para fazer o hash de todo o valor XMLType, como um CLOB extraído com o getClobVal função, com uma função wrapper para torná-lo mais simples 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;
/

Você pode então passar seu XMLType, como um valor ou como uma coluna como parte de uma seleção:
select my_hash(xml) from t42;

MY_HASH(XML)                                 
---------------------------------------------
494C4E7688963BCF312B709B33CD1B5CCA7C0289