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

Oracle 如何实现ora_散列(将任何sql数据类型划分为n个bucket的可种子散列),oracle,hash,ora-hash,Oracle,Hash,Ora Hash,我看过wikipedia关于哈希表的文章,但它似乎没有说明如何实现一个哈希表,该哈希表可以将任意SQL数据类型的条目均匀地分布到n个bucket中 有人能告诉我关于这个主题的文档或现有源代码的方向吗?我相信你说的是一个完美的哈希函数。Oracle的ORA_散列函数不是一个完美的散列函数 尽可能接近您想要的是一个关联数组。甲骨文有这些。 开始玩这个例子: set serverout on size 10000 DECLARE cursor foo is select distinct f

我看过wikipedia关于哈希表的文章,但它似乎没有说明如何实现一个哈希表,该哈希表可以将任意SQL数据类型的条目均匀地分布到n个bucket中


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

我相信你说的是一个完美的哈希函数。Oracle的ORA_散列函数不是一个完美的散列函数

尽可能接近您想要的是一个关联数组。甲骨文有这些。 开始玩这个例子:

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是唯一字段。这就是与众不同的人要做的。它从来都不是必需的。

您是在问如何实现哈希函数吗?如何具体实现
ora_hash
hash函数?如何构建哈希表(使用哈希函数的数据结构)?或者仅仅是如何在SQL查询中将数据分割成存储桶?ora_散列函数是如何具体实现的,最好是某种伪代码/代码,但抽象描述也很好。我不相信Oracle曾经记录过他们使用的算法。这与dbms实用程序使用的算法相同。获取散列值,但我不相信他们也在那里记录了内部算法。你知道有任何类似的文档实现,或者是如何实现这种散列的起点吗?
ora\u hash
。目标是均匀分布。但这不是保证。不过,如果您传入足够多的不同值,任何模糊合理的哈希算法都应该允许您将数据基本上均匀地分布在n个存储桶中。