Věřím, že mluvíte o dokonalé hashovací funkci. Funkce ORA_HASH společnosti Oracle není dokonalou hashovací funkcí.
http://en.wikipedia.org/wiki/Perfect_hash_function
Tak blízko, jak se dostanete k tomu, co se zdá, že chcete, je asociativní pole. Oracle je má. Začněte si hrát s tímto příkladem:
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;
/
Poznámka:Asociativní pole je postaveno na hashtable, výše uvedený příklad používá fld1 jako hash klíč. Výše uvedené tedy bude fungovat pouze tehdy, pokud, jak popisujete, dokonalé hashování, pouze pokud je fld1 jedinečné pole. To je to, co tam mají ti odlišní dělat. Není to vždy vyžadováno.