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

Oracle obtém valor de checksum para um bloco de dados definido por uma cláusula select


Você pode usar DBMS_SQLHASH.GETHASH por esta. Os resultados da consulta devem ser ordenados e não devem conter nenhum LOB, ou os resultados não serão determinísticos.
select dbms_sqlhash.gethash(q'[select * from some_table order by 1,2]', digest_type => 1)
from dual;

Onde digest_type 1 =HASH_MD4, 2 =HASH_MD5, 3 =HASH_SH1.

Esse pacote não é concedido a ninguém por padrão. Para usá-lo, você precisará de alguém para fazer logon como SYS e executar isto:
SQL> grant execute on dbms_sqlhash to <your_user>;

Os resultados da consulta devem ser ordenados, conforme descrito em "Bug 17082212:DBMS_SQLHASH DIFFERENT RESULTS FROM DIFFERENT ACCESS PATH".

Não sei por que os LOBs não funcionam, mas pode estar relacionado à maneira como a função ORA_HASH não funciona bem com LOBs. Este artigo de Jonathan Lewis inclui alguns exemplos de ORA_HASH retornando resultados diferentes para os mesmos dados LOB. E versões recentes do SQL Language Reference alertam que ORA_HASH não suporta LOBs.