sql >> Databasteknik >  >> RDS >> Oracle

Hur man implementerar ora_hash (såddbar hash som delar upp alla SQL-datatyper i n hinkar)

Jag tror att du pratar om en perfekt hashfunktion. Oracles ORA_HASH-funktion är inte en perfekt hash-funktion.

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

Så nära du kommer det du verkar vilja ha är en associativ uppsättning. Oracle har de. Börja leka med det här exemplet:

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

Notera:en associativ array är byggd på en hashtabell, exemplet ovan använder fld1 som hash-nyckel. Så ovanstående fungerar bara om som du beskriver perfekt hash, om och bara om fld1 är ett unikt fält. Det är vad de distinkta där inne att göra. Det är aldrig alltid nödvändigt.




  1. Anslut till en PostgreSQL-databas på en Docker-behållare

  2. SQL-tillstånd [99999]; felkod [17004]; Ogiltig kolumntyp:1111 Med Spring SimpleJdbcCall

  3. Ignorera apostrof i mysql-sökningar

  4. Få den första dagen i månaden i PostgreSQL