Assegna valore a incremento automatico alla nuova colonna in Oracle
Domanda
Ho questa tabella in un DB Oracle che ha una chiave primaria definita su 3 delle colonne di dati. Voglio eliminare il vincolo della chiave primaria per consentire alle righe con dati duplicati per quelle colonne e creare una nuova colonna, "id", per contenere un ID intero a incremento automatico per queste righe. So come creare una sequenza e innescare per aggiungere un ID auto-incrementante per le nuove righe aggiunte alla tabella, ma è possibile scrivere un'istruzione PL / SQL per aggiungere ID univoci a tutte le righe che sono già nella tabella?
Soluzione
Dopo aver creato la sequenza:
update mytable
set id = mysequence.nextval;
Altri suggerimenti
Se stai semplicemente utilizzando un numero intero per una sequenza, puoi aggiornare l'id con il rownum. per es.
update
table
set id = rownum
È quindi necessario reimpostare la sequenza sull'ID valido successivo.
È questo ciò di cui hai bisogno?
UPDATE your_table
SET id = your_seq.nextval;
Questo presuppone che non ti interessi l'ordine in cui sono le tue chiavi primarie.
Per prima cosa dovresti controllare il tuo PCTFREE ... c'è abbastanza spazio per ogni fila per allungare?
Se hai scelto un PCTFREE molto piccolo o i tuoi dati hanno molti aggiornamenti che aumentano la lunghezza, potresti iniziare a concatenare ogni riga per farlo come un aggiornamento.
È quasi sicuramente meglio farlo come CTAS.
Crea la tabella t2 come seleziona seq.nextval, t1. * da t1.
rilascia t1
rinomina da t2 a t1.