Ik geloof dat je het hebt over een perfecte hash-functie. De ORA_HASH-functie van Oracle is geen perfecte hash-functie.
http://en.wikipedia.org/wiki/Perfect_hash_function
Zo dicht als je komt bij wat je lijkt te willen, is een associatieve array. Oracle heeft die. Begin te spelen met dit voorbeeld:
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;
/
Opmerking:een associatieve array is gebouwd op een hashtabel, het bovenstaande voorbeeld gebruikt fld1 als de hash-sleutel. Dus het bovenstaande werkt alleen als, zoals u beschrijft, perfecte hashing, als en alleen als fld1 een uniek veld is. Dat is wat de onderscheiden daarbinnen te doen. Het is nooit altijd nodig.