Вярвам, че говорите за перфектна хеш функция. Функцията ORA_HASH на Oracle не е перфектна хеш функция.
http://en.wikipedia.org/wiki/Perfect_hash_function
Най-близо до това, което изглежда искате, е асоциативен масив. Oracle ги има. Започнете да играете с този пример:
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;
/
Забележка:асоциативен масив е изграден върху хеш-таблица, горният пример използва fld1 като хеш ключ. Така че горното ще работи само ако, както описвате, перфектно хеширане, ако и само ако fld1 е уникално поле. Това е, което отделните трябва да направят. Никога не винаги е необходимо.