Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle obtient la valeur de la somme de contrôle pour un bloc de données défini par une clause select

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.