Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie man ora_hash implementiert (einstellbarer Hash, der jeden SQL-Datentyp in n Buckets aufteilt)

Ich glaube, Sie sprechen von einer perfekten Hash-Funktion. Die ORA_HASH-Funktion von Oracle ist keine perfekte Hash-Funktion.

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

So nah wie möglich an das, was Sie zu wollen scheinen, kommt ein assoziatives Array. Oracle hat diese. Beginnen Sie mit diesem Beispiel zu spielen:

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;
/  

Hinweis:Ein assoziatives Array basiert auf einer Hashtabelle, das obige Beispiel verwendet fld1 als Hash-Schlüssel. Das obige funktioniert also nur, wenn, wie Sie es beschreiben, perfektes Hashing, wenn und nur wenn fld1 ein eindeutiges Feld ist. Das ist, was der Unterschied darin zu tun hat. Es ist nie immer erforderlich.