sql >> Databáze >  >> RDS >> Oracle

Oracle Partitioned Sequence

Je skutečný požadavek, aby sekundární sekvence byla bez mezer? Pokud ano, máte velký problém se serializací/škálovatelností.

Pokud potřebujete prezentovat sekvenci bez mezer pro lidskou spotřebu, můžete použít skutečnou sekvenci (nebo časové razítko), jak navrhuje Nick Pierpont, a zachovat škálovatelnost, můžete použít analytické funkce.

Datová sada (t1):

 ID_PERSON SEQUENCE_ID
---------- -----------
         1           1
         2           2
         3           3
         1           4
         1           5
         1           6
         2           7
         3           8
         1           9

SQL:

select * 
  from 
  (select id_person, 
          sequence_id as orig_sequence_id,         
          rank () 
            over (partition by id_person 
                  order by sequence_id) 
            as new_sequence_id
     from t1
  )
 order by id_person, new_sequence_id;

Výsledek:

ID_PERSON  ORIG_SEQUENCE_ID NEW_SEQUENCE_ID
---------- ---------------- ---------------
         1                1               1
         1                4               2
         1                5               3
         1                6               4
         1                9               5
         2                2               1
         2                7               2
         3                3               1
         3                8               2


  1. Pochopení SQL Server LOCKS na SELECT dotazy

  2. Známky toho, že vaše databáze již pro vás nefunguje

  3. Řešení problémů generátoru číselných řad – 2. část

  4. Replikace MySQL:Chybné transakce v replikaci založené na GTID