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

Jak implementovat ora_hash (seedable hash, který rozděluje jakýkoli datový typ SQL do n segmentů)

Věřím, že mluvíte o dokonalé hashovací funkci. Funkce ORA_HASH společnosti Oracle není dokonalou hashovací funkcí.

http://en.wikipedia.org/wiki/Perfect_hash_function

Tak blízko, jak se dostanete k tomu, co se zdá, že chcete, je asociativní pole. Oracle je má. Začněte si hrát s tímto příkladem:

set serverout on size 10000
DECLARE
cursor foo 
is 
  select distinct fld1,fld2,fld9  from sometable;

type t is table of foo.%ROWTYPE
  index by varchar2;   -- change the index to an int if you want

myarray t; -- myarray is a table of records -- whatever foo returns

BEGIN
  for x in foo
  loop
      -- index using the first column of the fetched row  "fld1":
      myarray(x.fld1)=x;  -- assign the rowtype to the table of records.      
  end loop;

END;
/  

Poznámka:Asociativní pole je postaveno na hashtable, výše uvedený příklad používá fld1 jako hash klíč. Výše ​​uvedené tedy bude fungovat pouze tehdy, pokud, jak popisujete, dokonalé hashování, pouze pokud je fld1 jedinečné pole. To je to, co tam mají ti odlišní dělat. Není to vždy vyžadováno.




  1. Zobrazit „Nebyly nalezeny žádné shody“ nebo skrýt výsledky DIV (AJAX a MySQL)

  2. Vrácení výstupu skriptu Python CGI MySQL

  3. MySQL Spojení dvou ID tabulek pro vytváření výsledků z jedné tabulky do druhé

  4. Podivný výsledek pro GROUP_CONCAT v dílčím dotazu