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
.