あなたは完璧なハッシュ関数について話していると思います。 OracleのORA_HASH関数は完全なハッシュ関数ではありません。
http://en.wikipedia.org/wiki/Perfect_hash_function
必要と思われるものにできるだけ近いのは、連想配列です。オラクルにはそれらがあります。この例で遊んでください:
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が一意のフィールドである場合にのみ機能します。それが、そこにある明確なことです。常に必要になることはありません。