Jag tror att du pratar om en perfekt hashfunktion. Oracles ORA_HASH-funktion är inte en perfekt hash-funktion.
http://en.wikipedia.org/wiki/Perfect_hash_function
Så nära du kommer det du verkar vilja ha är en associativ uppsättning. Oracle har de. Börja leka med det här exemplet:
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;
/
Notera:en associativ array är byggd på en hashtabell, exemplet ovan använder fld1 som hash-nyckel. Så ovanstående fungerar bara om som du beskriver perfekt hash, om och bara om fld1 är ett unikt fält. Det är vad de distinkta där inne att göra. Det är aldrig alltid nödvändigt.