Vous pouvez utiliser DBMS_SQLHASH.GETHASH
pour ça. Les résultats de la requête doivent être ordonnés et ne doivent contenir aucun LOB, sinon les résultats ne seront pas déterministes.
select dbms_sqlhash.gethash(q'[select * from some_table order by 1,2]', digest_type => 1)
from dual;
Où digest_type 1 =HASH_MD4, 2 =HASH_MD5, 3 =HASH_SH1.
Ce package n'est accordé à personne par défaut. Pour l'utiliser, vous aurez besoin de quelqu'un pour vous connecter en tant que SYS et exécuter ceci :
SQL> grant execute on dbms_sqlhash to <your_user>;
Les résultats de la requête doivent être triés, comme décrit dans "Bug 17082212 :DBMS_SQLHASH DIFFERENT RESULTS FROM DIFFERENT ACCESS PATH".
Je ne sais pas pourquoi les LOB ne fonctionnent pas, mais cela pourrait être lié à la façon dont la fonction ORA_HASH
ne fonctionne pas bien avec les LOB. Cet article de Jonathan Lewis inclut quelques exemples de ORA_HASH
renvoyant des résultats différents pour les mêmes données LOB. Et les versions récentes de la référence du langage SQL avertissent que ORA_HASH
ne prend pas en charge les LOB.