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.