Oracle
 sql >> база данни >  >> RDS >> Oracle

ora_hash детерминистичен ли е?

ORA_HASH определено е детерминиран за типове данни, които могат да се използват за разделяне, като NUMBER, VARCHAR, DATE и т.н.

Но ORA_HASH ене детерминистичен за поне някои от другите типове данни, като CLOB.

Отговорът ми се основава на това Статия на Джонатан Люис за ORA_HASH .

Джонатан Луис не казва изрично, че са детерминистични, но споменава, че ORA_HASH "изглежда, че е функцията, използвана вътрешно – с нулево семе – за определяне към кой дял принадлежи ред в хеш-разделена таблица". И ако се използва за хеш разделяне, тогава трябва да е детерминистично, в противен случай съединяванията по дялове няма да работят.

За да покаже, че ORA_HASH може да бъде недетерминиран за някои типове данни, изпълнете заявката по-долу. Това е от коментар в същата статия:

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;

Изненадващо, същите проблеми се случват с 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. Принудително външният SELECT да се провали, ако вътрешният SELECT съдържа невалиден идентификатор

  2. IN срещу OR на Oracle, кое по-бързо?

  3. ORA-01855:сутрин/сутрин или PM/P.M. изисква се

  4. Oracle Търсене във всички таблици във всички колони за низ

  5. Как да изберете * плюс друга колона