sql >> Database teknologi >  >> RDS >> Oracle

Sådan implementeres ora_hash (seedbar hash, der opdeler enhver sql-datatype i n buckets)

Jeg tror, ​​du taler om en perfekt hash-funktion. Oracles ORA_HASH-funktion er ikke en perfekt hash-funktion.

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

Så tæt som du kommer på det, du ser ud til at ønske, er en associativ række. Oracle har dem. Begynd at lege med dette eksempel:

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

Bemærk:et associativt array er bygget på en hashtabel, ovenstående eksempel bruger fld1 som hash-nøglen. Så ovenstående vil kun fungere, hvis som du beskriver, perfekt hashing, hvis og kun hvis fld1 er et unikt felt. Det er, hvad de særskilte derinde skal gøre. Det er aldrig altid nødvendigt.




  1. kommandoprompt login som en anden bruger

  2. Registreringsformular med php, mysql

  3. SQL:Tilføj kolonne med trinvis id til SELECT

  4. Importer Excel-data til PostgreSQL 9.3