Myślę, że mówisz o doskonałej funkcji skrótu. Funkcja Oracle ORA_HASH nie jest idealną funkcją mieszającą.
http://en.wikipedia.org/wiki/Perfect_hash_function
Tak blisko, jak zbliżysz się do tego, czego chcesz, jest tablica asocjacyjna. Oracle to ma.Zacznij bawić się tym przykładem:
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;
/
Uwaga:tablica asocjacyjna jest zbudowana na tablicy haszującej, powyższy przykład używa fld1 jako klucza haszującego. Tak więc powyższe będzie działać tylko wtedy, gdy tak jak opisujesz, doskonałe mieszanie, wtedy i tylko wtedy, gdy fld1 jest unikalnym polem. To jest to, co jest tam do zrobienia. Nigdy nie jest to wymagane.