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

Hvordan opretter man en Oracle-sekvens, der starter med maks. værdi fra en tabel?

Hvis du kan bruge PL/SQL, så prøv (EDIT:Inkorporerer Neils xlnt-forslag om at starte med næste højere værdi):

SELECT 'CREATE SEQUENCE transaction_sequence MINVALUE 0 START WITH '||MAX(trans_seq_no)+1||' INCREMENT BY 1 CACHE 20'
  INTO v_sql
  FROM transaction_log;

EXECUTE IMMEDIATE v_sql;

Et andet punkt at overveje:Ved at indstille CACHE-parameteren til 20 risikerer du at miste op til 19 værdier i din sekvens, hvis databasen går ned. Cachelagrede værdier går tabt ved genstart af databasen. Medmindre du rammer sekvensen meget ofte, eller du er ligeglad med huller, ville jeg indstille den til 1.

En sidste nit:de værdier, du har angivet for CACHE og INCREMENT BY, er standardværdierne. Du kan forlade dem og få det samme resultat.



  1. Returner ikke-numeriske værdier fra en PostgreSQL-databasekolonne

  2. TNS-12505:TNS:listener kender i øjeblikket ikke til SID givet i forbindelsesbeskrivelsen

  3. Kunne du drage fordel af en tilpasset databaseapplikation?

  4. UUID eller SEQUENCE for primærnøgle?