mardi 12 juillet 2011

ORA_HASH : fonction de hachage

La fonction de hachage ORA_HASH introduite en 10G, permet de répartir des valeurs en entrée vers une sortie homogène. C'est cette même fonction qui est utilisée par Oracle pour répartir les valeurs d'une colonne dans une table partitionnée. (Voir exemple ci-dessous).

Cette fonction a deux ou trois arguments

select ORA_HASH(expr, max_bucket, seed_value) from DUAL;
 
expr : expression sur laquelle on applique le hachage
 
max_bucket : numéro maximal de sortie de fonction en partant de 0
 
seed_value (otionnelle) : valeurs prise en compte dans la fonction de hachage pour permettre une variation des résultats avec une même expression en entrée (par défaut seed_value = 0).

 
SQL> CREATE TABLE test PARTITION BY HASH (a) (
  2     PARTITION p1,
  3     PARTITION p2,
  4     PARTITION p3,
  5     PARTITION p4
  6  )
  7  AS
  8  SELECT ROWNUM AS a
  9  FROM ALL_OBJECTS
 10  WHERE ROWNUM < 1000
 11  /

Table created.

SQL> SELECT COUNT(*) FROM test PARTITION (p1)
  2     WHERE ORA_HASH(a,3)+1<>1;

  COUNT(*)
----------
         0

SQL> SELECT COUNT(*) FROM test PARTITION (p2)
  2     WHERE ORA_HASH(a,3)+1<>2;

  COUNT(*)
----------
         0

SQL> SELECT COUNT(*) FROM test PARTITION (p3)
  2     WHERE ORA_HASH(a,3)+1<>3;

  COUNT(*)
----------
         0

SQL> SELECT COUNT(*) FROM test PARTITION (p4)
  2     WHERE ORA_HASH(a,3)+1<>4;

  COUNT(*)
----------
         0


Aucun commentaire:

Enregistrer un commentaire