Jeg tror, du taler om en perfekt hash-funktion. Oracles ORA_HASH-funktion er ikke en perfekt hash-funktion.
http://en.wikipedia.org/wiki/Perfect_hash_function
Så tæt som du kommer på det, du ser ud til at ønske, er en associativ række. Oracle har dem. Begynd at lege med dette eksempel:
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;
/
Bemærk:et associativt array er bygget på en hashtabel, ovenstående eksempel bruger fld1 som hash-nøglen. Så ovenstående vil kun fungere, hvis som du beskriver, perfekt hashing, hvis og kun hvis fld1 er et unikt felt. Det er, hvad de særskilte derinde skal gøre. Det er aldrig altid nødvendigt.