sql >> Databasteknik >  >> RDS >> Oracle

Är ora_hash deterministiskt?

ORA_HASH är definitivt deterministiskt för datatyper som kan användas för partitionering, såsom NUMBER, VARCHAR, DATE, etc.

Men ORA_HASH är inte deterministisk för åtminstone några av de andra datatyperna, såsom CLOB.

Mitt svar är baserat på detta Jonathan Lewis-artikel om ORA_HASH .

Jonathan Lewis säger inte uttryckligen att de är deterministiska, men han nämner att ORA_HASH "verkar vara funktionen som används internt – med nollfrö – för att bestämma vilken partition en rad tillhör i en hashpartitionerad tabell". Och om den används för hash-partitionering måste den vara deterministisk, annars skulle partitionsmässiga joins inte fungera.

För att visa att ORA_HASH kan vara icke-deterministisk för vissa datatyper, kör nedanstående fråga. Det är från en kommentar i samma 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;

Överraskande nog händer samma problem med dbms_sqlhash.gethash .



  1. Lista de frågor som körs på SQL Server

  2. Postgis - Hur man arbetar med datatyp 'geografi' via JDBC

  3. Allmän trädgenomgång (oändlig) i bredd-först söksätt

  4. Hur man skickar värden i anonymt block med plsql-tabellparameter