Sequenzen (Autonumber) Oracle/PLSQL

In diesem Oracle-Lernprogramm wird erläutert, wie Sie in Oracle create and drop sequences mit Syntax und Beispielen.

Beschreibung

In Oracle können Sie mithilfe von Sequenzen ein Feld für die automatische Nummerierung erstellen. Eine Sequenz ist ein Objekt in Oracle, das zum Generieren einer Zahlensequenz verwendet wird. Dies kann nützlich sein, wenn Sie eine eindeutige Nummer erstellen müssen, die als Primärschlüssel fungiert.

Create Sequence

Sie können in Oracle eine Sequenz erstellen, um ein Feld für die automatische Nummerierung zu verarbeiten.

Syntax

Die Syntax zum Erstellen einer Sequenz in Oracle lautet:

CREATE SEQUENCE sequence_name
MINVALUE value
MAXVALUE value
START WITH value
INCREMENT BY value
CACHE value;

sequence_name
Der Name der Sequenz, die Sie erstellen möchten.

Beispiel

Sehen wir uns ein Beispiel für das Erstellen einer Sequenz in Oracle an.

Zum Beispiel:

Dadurch würde ein Sequenzobjekt mit dem Namen supplier_seq erstellt. Die erste Sequenznummer, die es verwenden würde, ist 1, und jede nachfolgende Nummer würde sich um 1 erhöhen (dh: 2,3,4, …}. Es werden bis zu 20 Werte für die Leistung zwischengespeichert.

Wenn Sie die Option MAXVALUE nicht angeben, wird Ihre Sequenz standardmäßig automatisch wie folgt festgelegt:

So können Sie Ihren CREATE SEQUENCE-Befehl folgendermaßen vereinfachen:

Nachdem Sie nun ein Sequenzobjekt erstellt haben, um ein Feld für die automatische Nummerierung zu simulieren, wird beschrieben, wie Sie einen Wert aus diesem Sequenzobjekt abrufen. Um den nächsten Wert in der Sequenzreihenfolge abzurufen, müssen Sie nextval verwenden.

Zum Beispiel:

Dies würde den nächsten Wert von supplier_seq abrufen. Die nextval-Anweisung muss in einer SQL-Anweisung verwendet werden. Zum Beispiel:

Diese Einfügeanweisung fügt einen neuen Datensatz in die suppliers Tabelle ein. Dem Feld supplier_id wird die nächste Nummer aus der Sequenz supplier_seq zugewiesen. Das Feld supplier_name würde auf Kraft Foods gesetzt.

Drop Sequence

Nachdem Sie Ihre Sequenz in Oracle erstellt haben, müssen Sie sie möglicherweise aus der Datenbank entfernen.

Syntax

Die Syntax für das Ablegen einer Sequenz in Oracle lautet:

DROP SEQUENCE sequence_name;

sequence_name
Der Name der Sequenz, die Sie löschen möchten.

Beispiel

Sehen wir uns ein Beispiel für das Löschen einer Sequenz in Oracle an.

Zum Beispiel:

In diesem Beispiel wird die Sequenz supplier_seq gelöscht.

Häufig gestellte Fragen
Eine häufige Frage zu Sequenzen lautet:

Frage:

Was bedeuten die Optionen Cache und Nocache beim Erstellen einer Sequenz? Sie können beispielsweise eine Sequenz mit einem Cache von 20 wie folgt erstellen:

Oder Sie können dieselbe Sequenz mit der Option nocache erstellen:

Antwort:

In Bezug auf eine Sequenz legt die Cache-Option fest, wie viele Sequenzwerte für einen schnelleren Zugriff im Speicher gespeichert werden.

Der Nachteil beim Erstellen einer Sequenz mit einem Cache besteht darin, dass bei einem Systemausfall alle zwischengespeicherten Sequenzwerte, die nicht verwendet wurden, „verloren“ sind. Dies führt zu einer „Lücke“ in den zugewiesenen Sequenzwerten. Wenn das System wieder hochgefahren wird, speichert Oracle neue Zahlen an der Stelle, an der es in der Sequenz aufgehört hat, und ignoriert so genannte „verlorene“ Sequenzwerte.

Hinweis: Um die verlorenen Sequenzwerte wiederherzustellen, können Sie immer einen ALTER SEQUENCE-Befehl ausführen, um den Zähler auf den korrekten Wert zurückzusetzen.
Nocache bedeutet, dass keiner der Sequenzwerte im Speicher gespeichert wird. Diese Option kann die Leistung beeinträchtigen. Es sollte jedoch keine Lücke in den zugewiesenen Sequenzwerten auftreten.

Frage:

Wie setzen wir den LASTVALUE-Wert in einer Oracle-Sequenz?

Antwort:

Sie können den LASTVALUE für eine Oracle-Sequenz ändern, indem Sie den Befehl ALTER SEQUENCE ausführen.

Wenn zum Beispiel der letzte von der Oracle-Sequenz verwendete Wert 100 war und Sie die Sequenz zurücksetzen möchten, um als nächsten Wert 225 zu dienen. Sie würden die folgenden Befehle ausführen.

Nun ist der nächste Wert, den die Sequenz liefern soll, 225.