sql >> Databáze >  >> RDS >> Oracle

Je ora_hash deterministický?

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 .



  1. SQL Jak vybrat nejnovější položku data

  2. Rozdělení řetězců:Nyní s menším množstvím T-SQL

  3. Dotaz na získání rodičovských záznamů s podřízeným záznamem, následovaný dalšími záznamy rodič-dítě v mysql

  4. Získání skutečného plánu provádění v Oracle 11g