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

Oracle obtiene el valor de suma de verificación para un fragmento de datos definido por una cláusula de selección

Puede usar DBMS_SQLHASH.GETHASH para esto. Los resultados de la consulta deben estar ordenados y no deben contener ningún LOB, o los resultados no serán deterministas.

select dbms_sqlhash.gethash(q'[select * from some_table order by 1,2]', digest_type => 1)
from dual;

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

Ese paquete no se otorga a nadie por defecto. Para usarlo, necesitará que alguien inicie sesión como SYS y ejecute esto:

SQL> grant execute on dbms_sqlhash to <your_user>;

Los resultados de la consulta se deben ordenar, como se describe en "Error 17082212:DBMS_SQLHASH DIFERENTES RESULTADOS DE DIFERENTES RUTAS DE ACCESO".

No estoy seguro de por qué los LOB no funcionan, pero podría estar relacionado con la forma en que la función ORA_HASH no funciona bien con LOB. Este artículo de Jonathan Lewis incluye algunos ejemplos de ORA_HASH devolviendo diferentes resultados para los mismos datos LOB. Y las versiones recientes de SQL Language Reference advierten que ORA_HASH no admite LOB.