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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top