automatischer Erhöhung Wert auf neue Spalte in Oracle zuweisen
Frage
Ich habe diese Tabelle in einer Oracle-DB, die einen Primärschlüssel auf 3 der Datenspalten definiert ist. Ich mag die Primärschlüsselbedingung fallen Zeilen mit doppelten Daten für diese Spalten zu ermöglichen, und erstellen Sie eine neue Spalte, ‚id‘, eine automatisch inkrementierende Ganzzahl-ID für diese Zeilen zu enthalten. Ich weiß, wie eine Sequenz erstellen und lösen eine automatisch inkrementierende ID für neue Zeilen in die Tabelle hinzugefügt, um hinzuzufügen, aber ist es möglich, eine PL / SQL-Anweisung hinzufügen eindeutige IDs zu allen Zeilen zu schreiben, die bereits in der Tabelle sind?
Lösung
Wenn Sie die Sequenz erstellt haben:
update mytable
set id = mysequence.nextval;
Andere Tipps
Wenn Sie nur eine ganze Zahl für eine Sequenz Verwenden Sie die ID mit dem rownum aktualisieren konnte. z.
update
table
set id = rownum
Sie müssen dann die Sequenz auf die nächste gültige ID zurücksetzen.
Ist das, was Sie brauchen?
UPDATE your_table
SET id = your_seq.nextval;
Dies setzt voraus, Sie nicht, was Ihr Primärschlüssel bestellen ist in.
Als erstes sollten Sie Ihre PCTFREE überprüfen ... gibt es genug Platz für jede Zeile mehr zu bekommen?
Wenn Sie einen sehr kleinen PCTFREE gewählt oder Ihre Daten hat viele Länge steigernde Updates, könnten Sie beginnen jede Zeile verketten diese als Update zu tun.
Sie fast sicher besser dies als CTAS zu tun.
Erstellen Tabelle t2 als Auswahl seq.nextval, t1. * From t1.
Drop t1
umbenennen t2 bis t1.