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

Come creare una sequenza Oracle che inizia con il valore massimo da una tabella?

Se puoi usare PL/SQL, prova (EDIT:incorpora il suggerimento xlnt di Neil per iniziare con un valore successivo più alto):

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;

Un altro punto da considerare:impostando il parametro CACHE su 20, si corre il rischio di perdere fino a 19 valori nella sequenza se il database si interrompe. I valori memorizzati nella cache vengono persi al riavvio del database. A meno che tu non esegua la sequenza molto spesso, o non ti interessi molto degli spazi vuoti, lo imposterei su 1.

Un ultimo nit:i valori specificati per CACHE e INCREMENT BY sono i valori predefiniti. Puoi lasciarli fuori e ottenere lo stesso risultato.