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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top