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

¿Es ora_hash determinista?

ORA_HASH es definitivamente determinista para los tipos de datos que se pueden usar para particionar, como NÚMERO, VARCHAR, FECHA, etc.

Pero ORA_HASH es no determinista para al menos algunos de los otros tipos de datos, como CLOB.

Mi respuesta se basa en esto Artículo de Jonathan Lewis sobre ORA_HASH .

Jonathan Lewis no dice explícitamente que sean deterministas, pero sí menciona que ORA_HASH "parece ser la función utilizada internamente, con una semilla cero, para determinar a qué partición pertenece una fila en una tabla particionada por hash". Y si se usa para la partición hash, entonces debe ser determinista, o de lo contrario, las uniones por partición no funcionarían.

Para mostrar que ORA_HASH puede ser no determinista para algunos tipos de datos, ejecute la siguiente consulta. Es de un comentario en el mismo artículo:

with src as (select to_clob('42') val from dual connect by level<=5)
select val,ora_hash(val,7) from src order by 2;

Sorprendentemente, este mismo problema ocurre con dbms_sqlhash.gethash .