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

O ora_hash é determinístico?


ORA_HASH é definitivamente determinístico para tipos de dados que podem ser usados ​​para particionamento, como NUMBER, VARCHAR, DATE, etc.

Mas ORA_HASH é não determinístico para pelo menos alguns dos outros tipos de dados, como CLOB.

Minha resposta é baseada em neste Artigo de Jonathan Lewis sobre ORA_HASH .

Jonathan Lewis não diz explicitamente que eles são determinísticos, mas menciona que ORA_HASH "parece ser a função usada internamente - com uma semente zero - para determinar a qual partição uma linha pertence em uma tabela particionada por hash". E se for usado para particionamento de hash, deve ser determinístico, ou então as junções de partição não funcionariam.

Para mostrar que ORA_HASH pode ser não determinístico para alguns tipos de dados, execute a consulta abaixo. É de um comentário no mesmo artigo:
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;

Surpreendentemente, esses mesmos problemas acontecem com dbms_sqlhash.gethash .