sql >> Databasteknik >  >> RDS >> Oracle

Hur skapar man en Oracle-sekvens som börjar med maxvärde från en tabell?

Om du kan använda PL/SQL, försök (EDIT:Inkorporerar Neils xlnt-förslag för att börja med nästa högre värde):

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;

En annan punkt att tänka på:Genom att sätta parametern CACHE till 20 riskerar du att förlora upp till 19 värden i din sekvens om databasen går ner. Cachelagrade värden går förlorade vid omstart av databasen. Om du inte träffar sekvensen väldigt ofta, eller om du inte bryr dig så mycket om luckor, skulle jag ställa in den på 1.

En sista nit:värdena du angav för CACHE och INCREMENT BY är standardvärdena. Du kan lämna dem och få samma resultat.



  1. Sök i en JSON-array efter ett objekt som innehåller ett värde som matchar ett mönster

  2. Hur snabbar jag på att räkna rader i en PostgreSQL-tabell?

  3. php mysqli_connect:autentiseringsmetod okänd för klienten [caching_sha2_password]

  4. Vilka är fördelarna med VistaDB