ORA_HASH je rozhodně deterministický pro datové typy, které lze použít k rozdělení, jako je NUMBER, VARCHAR, DATE atd.
Ale ORA_HASH není deterministický pro alespoň některé další datové typy, jako je CLOB.
Moje odpověď je založena na tomto
Článek Jonathana Lewise o ORA_HASH .
Jonathan Lewis výslovně neříká, že jsou deterministické, ale zmiňuje, že ORA_HASH "zdá se, že je to funkce používaná interně - s nulovým počátečním číslem - k určení, do kterého oddílu patří řádek v tabulce rozdělené hash". A pokud se používá pro rozdělování hash, musí být deterministické, jinak by spojení po oddílech nefungovalo.
Chcete-li ukázat, že ORA_HASH může být pro některé datové typy nedeterministické, spusťte níže uvedený dotaz. Je to z komentáře ve stejném článku:
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;
Překvapivě ke stejným problémům dochází u dbms_sqlhash.gethash .