Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Czy ora_hash jest deterministyczny?

ORA_HASH jest zdecydowanie deterministyczny dla typów danych, które mogą być używane do partycjonowania, takich jak NUMBER, VARCHAR, DATE itp.

Ale ORA_HASH jest nie deterministyczny dla przynajmniej niektórych innych typów danych, takich jak CLOB.

Moja odpowiedź opiera się na tym Artykuł Jonathana Lewisa o ORA_HASH .

Jonathan Lewis nie mówi wyraźnie, że są deterministyczne, ale wspomina, że ​​ORA_HASH „wydaje się być funkcją używaną wewnętrznie – z zerowym ziarnem – w celu określenia, do której partycji należy wiersz w tabeli partycjonowanej z haszowaniem”. A jeśli jest używany do partycjonowania mieszającego, musi być deterministyczny, w przeciwnym razie łączenie partycji nie zadziała.

Aby pokazać, że ORA_HASH może być niedeterministyczny dla niektórych typów danych, uruchom poniższe zapytanie. Pochodzi z komentarza w tym samym artykule:

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;

Co zaskakujące, te same problemy występują w przypadku dbms_sqlhash.gethash .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 sposoby na usunięcie zduplikowanych wierszy w Oracle

  2. Oracle hierarchiczna klauzula startowa kwerendy od join

  3. Zapobiegaj automatycznemu zatwierdzaniu połączenia Oracle dla źródła danych JNDI na JBoss 7 (Jeeves DBMS)

  4. Oracle sql plus szpula

  5. Czy zmienne PL/SQL w kursorach są faktycznie takie same jak parametry wiązania?