Oracle 9 - Zurücksetzen-Sequenz entsprechen dem Stand der Tabelle
Ich eine Sequenz verwendet, um Samen meiner (Integer-basiert) primäre Schlüssel in oracle-Tabelle.
Scheint es, diese Sequenz wurde nicht immer verwendet, um das einfügen neuer Werte in die Tabelle ein. Wie bekomme ich die Sequenz wieder in Schritt mit den tatsächlichen Werten in der Tabelle?
InformationsquelleAutor der Frage AJM | 2009-09-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ID den Namen Ihres PK-Spalte und PK_SEQ ist der name der Sequenz:
Finden, den Wert der höchsten von PK
SELECT MAX(ID) FROM tableName
Finden, den Wert der nächsten PK_SEQ durch
WÄHLEN SIE PK_SEQ.NEXTVAL FROM DUAL
getan, vorausgesetzt, Sie behandeln diese
Werte wie true Ersatzschlüssel
springen, um die max ID von ALTER SEQUENCE
PK_SEQ INKREMENT [#1 Wert #2
Wert]
Beule der Sequenz WÄHLEN
PK_SEQ.NEXTVAL FROM DUAL
Zurücksetzen der Sequenz-Inkrement-Wert
auf 1 durch VERÄNDERN der SEQUENZ PK_SEQ
INCREMENT BY 1
Diese alle davon ausgegangen, dass Sie keine neuen Einsätze in den Tisch, während Sie das tun...
InformationsquelleAutor der Antwort dpbradley
In kurz -, Spiel es:
Können Sie die max sequenzwert, der verwendet wird in der Tabelle sein, die Mathematik zu tun, und aktualisieren Sie die Reihenfolge entsprechend.
InformationsquelleAutor der Antwort David Andres
InformationsquelleAutor der Antwort Dieter DHoker
Habe ich dieses script, da ich nicht finden, ein Skript online, dynamisch legt alle mein Sequenzen der aktuell höchsten ID. Getestet auf Oracle 11.2.0.4.
InformationsquelleAutor der Antwort Blama
In einigen Fällen Sie finden es möglicherweise einfacher, einfach die aktuellen max-Wert und dann
Die app wird beendet, nachdem Sie die Tropfen. Aber, das hält niemand aus, einfügen von Zeilen während dieser Periode, und die Erstellung einer Sequenz ist schnell. Stellen Sie sicher, dass Sie wiederherstellen von Zuschüssen auf die Reihenfolge, da diese gelöscht werden, wenn die Sequenz. Und möchten Sie vielleicht, um manuell alle neu kompilieren plsql, hängt von der Reihenfolge.
InformationsquelleAutor der Antwort Jim Hudson
Hinzufügen von bis zu https://stackoverflow.com/a/15929548/1737973aber ohne Rückgriff auf
SEQUENCENAME.NEXTVAL
daher Ihre Ursache nicht in einer position, die es sein sollteHaftungsausschluss: wenn die Sequenz die Verwendung von Zwischenspeicherung (
all_sequences.cache_size
eingestellt, um größer als 0), werden Sie wahrscheinlich wollen, um es zu berücksichtigen bei der Berechnen Sie die Differenz Schritt.Der Oracle-Dokumentation
Sequenzen
....InformationsquelleAutor der Antwort uprego