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 .