如何实现ora_hash(将任何sql数据类型划分为n个桶的可种子散列)

时间:2014-06-23 22:43:10

标签: oracle hash ora-hash

我查看了关于哈希表的维基百科文章,但它似乎没有说明如何实现一个哈希表,可以将任意SQL数据类型的条目均匀地分配到n个桶中。

有人能指出我关于这个主题的文档或现有源代码的方向吗?

1 个答案:

答案 0 :(得分:1)

我相信你在谈论一个完美的哈希函数。 Oracle的ORA_HASH函数不是一个完美的哈希函数。

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是唯一字段时。这就是那里的独特之处。永远不需要它。