sql >> Database >  >> RDS >> Oracle

Is ora_hash deterministisch?

ORA_HASH is zeker bepalend voor gegevenstypen die kunnen worden gebruikt voor partitionering, zoals NUMBER, VARCHAR, DATE, enz.

Maar ORA_HASH is niet deterministisch voor ten minste enkele van de andere gegevenstypen, zoals CLOB.

Mijn antwoord is gebaseerd op dit Jonathan Lewis-artikel over ORA_HASH .

Jonathan Lewis zegt niet expliciet dat ze deterministisch zijn, maar hij vermeldt wel dat ORA_HASH "lijkt de functie die intern wordt gebruikt - met een nul seed - om te bepalen tot welke partitie een rij behoort in een hash-gepartitioneerde tabel". En als het wordt gebruikt voor hash-partitionering, moet het deterministisch zijn, anders zouden partitie-gewijze joins niet werken.

Om te laten zien dat ORA_HASH voor sommige gegevenstypen niet-bepalend kan zijn, voert u de onderstaande query uit. Het komt uit een opmerking in hetzelfde artikel:

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;

Verrassend genoeg doen zich dezelfde problemen voor met dbms_sqlhash.gethash .



  1. orakel drop-index indien bestaat

  2. controleer of de query resulteert in een lege rij mysqli

  3. Voor de laatste keer, NEE, u kunt IDENT_CURRENT() niet vertrouwen

  4. Leer 2 Nauwe verbinding