Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment implémenter ora_hash (hachage amorçable qui divise tout type de données sql en n buckets)

Je crois que vous parlez d'une fonction de hachage parfaite. La fonction ORA_HASH d'Oracle n'est pas une fonction de hachage parfaite.

http://en.wikipedia.org/wiki/Perfect_hash_function

Aussi proche que possible de ce que vous semblez vouloir, il y a un tableau associatif. Oracle en a.Commencez à jouer avec cet exemple :

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;
/  

Remarque :un tableau associatif est construit sur une table de hachage, l'exemple ci-dessus utilise fld1 comme clé de hachage. Ainsi, ce qui précède ne fonctionnera que si, comme vous le décrivez, un hachage parfait, si et seulement si fld1 est un champ unique. C'est ce qu'il faut faire. Ce n'est jamais toujours nécessaire.