FirebirdSQL logo
 FILTEREXCEPTION 

Wer kann eine Sequenz erstellen?

Die Anweisung CREATE SEQUENCE (CREATE GENERATOR) kann ausgeführt werden durch:

  • Administratoren

  • Benutzer mit dem Privileg CREATE SEQUENCE (CREATE GENERATOR)

Der Benutzer, der die Anweisung CREATE SEQUENCE (CREATE GENERATOR) ausführt, wird ihr Eigentümer.

Beispiel für CREATE SEQUENCE

  1. Erstellen der Sequenz EMP_NO_GEN mit CREATE SEQUENCE.

    CREATE SEQUENCE EMP_NO_GEN;
  2. Erstellen der Sequenz EMP_NO_GEN mit CREATE GENERATOR.

    CREATE GENERATOR EMP_NO_GEN;
  3. Erstellen der Sequenz EMP_NO_GEN mit einem Anfangswert von 5 und einem Inkrement von 1.

    CREATE SEQUENCE EMP_NO_GEN START WITH 5;
  4. Erstellen der Sequenz EMP_NO_GEN mit einem Anfangswert von 1 und einem Inkrement von 10.

    CREATE SEQUENCE EMP_NO_GEN INCREMENT BY 10;
  5. Erstellen der Sequenz EMP_NO_GEN mit einem Anfangswert von 5 und einem Inkrement von 10.

    CREATE SEQUENCE EMP_NO_GEN START WITH 5 INCREMENT BY 10;

docnext count = 13

ALTER SEQUENCE

Verwendet für

Den nächsten Wert einer Sequenz setzen oder deren Inkrement ändern

Verfügbar in

DSQL

Syntax
ALTER {SEQUENCE | GENERATOR} seq_name
  [RESTART [WITH newvalue]]
  [INCREMENT [BY] increment]
Table 1. ALTER SEQUENCE-Anweisungsparameter
Parameter Beschreibung

seq_name

Name der Sequenz (Generator)

newvalue

Neuer Sequenz-(Generator-)Wert.Eine 64-Bit-Ganzzahl von -2-63 bis 263-1.

increment

Erhöhen der Sequenz (bei Verwendung von NEXT VALUE FOR seq_name);kann nicht 0 sein.

Die ALTER SEQUENCE-Anweisung setzt den aktuellen Wert einer Sequenz oder eines Generators auf den angegebenen Wertund/oder ändert das Inkrement der Sequenz.

Mit der RESTART WITH newvalue-Klausel können Sie den nächsten von NEXT VALUE FOR seq_name generierten Wert setzen.Um dies zu erreichen, wird der aktuelle Wert der Sequenz entweder wie in der Anweisung angegeben auf (newvalue - increment) mit increment gesetzt oder in den Metadaten der Sequenz gespeichert.Die RESTART-Klausel (ohne WITH) startet die Sequenz mit dem in den Metadaten der Sequenz gespeicherten Anfangswert neu.

Note

Im Gegensatz zu Firebird 3.0 startet in Firebird 4.0 RESTART WITH newvalue die Sequenz nur mit dem angegebenen Wert neu und speichert newvalue nicht als neuen Anfangswert der Sequenz.Ein nachfolgender ALTER SEQUENCE RESTART verwendet den Anfangswert, der beim Erstellen der Sequenz angegeben wurde, und nicht den newvalue dieser Anweisung.Dieses Verhalten ist im SQL-Standard spezifiziert.

Es ist derzeit nicht möglich, den in den Metadaten gespeicherten Initialwert zu ändern.

Warning

Eine falsche Verwendung der ALTER SEQUENCE-Anweisung (Änderung des aktuellen Wertes der Sequenz oder des Generators) kann die logische Integrität der Daten verletzen oder zu Verletzungen von Primärschlüssel- oder Unique-Constraints führen.

Mit INCREMENT [BY] können Sie das Sequenzinkrement für den NEXT VALUE FOR-Ausdruck ändern.

Note

Das Ändern des Inkrementwerts wird für alle Abfragen wirksam, die nach dem Festschreiben der Transaktion ausgeführt werden.Prozeduren, die zum ersten Mal nach dem Ändern des Commits aufgerufen werden, verwenden den neuen Wert, wenn sie NEXT VALUE FOR verwenden.Prozeduren, die bereits verwendet (und im Metadaten-Cache zwischengespeichert wurden) verwenden weiterhin das alte Inkrement.Möglicherweise müssen Sie alle Verbindungen zur Datenbank schließen, damit der Metadatencache gelöscht und das neue Inkrement verwendet werden kann.Prozeduren, die NEXT VALUE FOR verwenden, müssen nicht neu kompiliert werden, um das neue Inkrement zu sehen.Prozeduren, die GEN_ID(gen, expression) verwenden, sind nicht betroffen, wenn das Inkrement geändert wird.

Wer kann eine Sequenz ändern?

Die Anweisung ALTER SEQUENCE (ALTER GENERATOR) kann ausgeführt werden durch:

  • Administratoren

  • Der Besitzer der Sequenz

  • Benutzer mit dem Privileg ALTER ANY SEQUENCE (ALTER ANY GENERATOR)

Beispiele für ALTER SEQUENCE

  1. Den Wert der EMP_NO_GEN-Sequenz so einstellen, dass der nächste Wert 145 ist.

    ALTER SEQUENCE EMP_NO_GEN RESTART WITH 145;
  2. Zurücksetzen des Basiswerts der Sequenz EMP_NO_GEN auf den in den Metadaten gespeicherten Initialwert

    ALTER SEQUENCE EMP_NO_GEN RESTART;
  3. Ändern der Schrittweite der Sequenz EMP_NO_GEN auf 10

    ALTER SEQUENCE EMP_NO_GEN INCREMENT BY 10;

CREATE OR ALTER SEQUENCE

Verwendet für

Erstellen einer neuen oder Ändern einer bestehenden Sequenz

Verfügbar in

DSQL, ESQL

Syntax
CREATE OR ALTER {SEQUENCE | GENERATOR} seq_name
  {RESTART | START WITH start_value}
  [INCREMENT [BY] increment]
Table 1. CREATE OR ALTER SEQUENCE-Anweisungsparameter
Parameter Beschreibung

seq_name

Name der Sequenz (Generator).Diese kann aus bis zu 63 Zeichen bestehen

start_value

Anfangswert der Sequenz.Standard ist 1

increment

Erhöhen der Sequenz (bei Verwendung von NEXT VALUE FOR seq_name);kann nicht 0 sein.Standard ist 1.

Wenn die Sequenz nicht existiert, wird sie erstellt.Eine bestehende Sequenz wird geändert:

  • Wenn RESTART angegeben ist, wird die Sequenz mit dem in den Metadaten gespeicherten Anfangswert neu gestartet

  • Wenn die START WITH-Klausel angegeben ist, wird die Sequenz mit start_value neu gestartet, aber der start_value wird nicht gespeichert.Mit anderen Worten, es verhält sich wie RESTART WITH in [fblangref40-ddl-sequence-alter-de].

  • Wenn die INCREMENT [BY]-Klausel angegeben ist, wird increment als Inkrement in den Metadaten gespeichert und für nachfolgende Aufrufe von NEXT VALUE FOR verwendet

Beispiel für SEQUENZ ERSTELLEN ODER ÄNDERN

Erstelle eine neue oder modifiziere eine bestehende Sequenz EMP_NO_GEN
CREATE OR ALTER SEQUENCE EMP_NO_GEN
  START WITH 10
  INCREMENT BY 1

DROP SEQUENCE

Verwendet für

Löschen einer Sequenz SEQUENCE (GENERATOR)

Verfügbar in

DSQL, ESQL

Syntax
DROP {SEQUENCE | GENERATOR} seq_name
Table 1. DROP SEQUENCE-Anweisungsparameter
Parameter Beschreibung

seq_name

Name der Sequenz (Generator).Diese kann aus bis zu 63 Zeichen bestehen

Die Anweisungen DROP SEQUENCE und DROP GENERATOR sind äquivalent: beide löschen eine existierende Sequenz (Generator).Beides ist gültig, aber DROP SEQUENCE wird empfohlen, da es im SQL-Standard definiert ist.

Die Anweisungen schlagen fehl, wenn die Sequenz (Generator) Abhängigkeiten hat.

Wer kann eine Sequenz löschen?

Die Anweisung DROP SEQUENCE (DROP GENERATOR) kann ausgeführt werden durch:

  • Administratoren

  • Der Besitzer der Sequenz

  • Benutzer mit dem Privileg DROP ANY SEQUENCE (DROP ANY GENERATOR)

Beispiel für DROP SEQUENCE

Löschen der EMP_NO_GEN-Reihe:
DROP SEQUENCE EMP_NO_GEN;

RECREATE SEQUENCE

Verwendet für

Sequenz erstellen oder neu erstellen (Generator)

Verfügbar in

DSQL, ESQL

Syntax
RECREATE {SEQUENCE | GENERATOR} seq_name
  [START WITH start_value]
  [INCREMENT [BY] increment]
Table 1. RECREATE SEQUENCE-Anweisungsparameter
Parameter Beschreibung

seq_name

Name der Sequenz (Generator).Diese kann aus bis zu 63 Zeichen bestehen

start_value

Anfangswert der Sequenz

increment

Erhöhen der Sequenz (bei Verwendung von NEXT VALUE FOR seq_name);kann nicht 0 sein

Siehe [fblangref40-ddl-sequence-create-de] für die vollständige Syntax von CREATE SEQUENCE und Beschreibungen zur Definition einer Sequenz und ihrer Optionen.

RECREATE SEQUENCE erstellt oder erstellt eine Sequenz neu.Existiert bereits eine Sequenz mit diesem Namen, versucht die RECREATE SEQUENCE-Anweisung, sie zu löschen und eine neue zu erstellen.Vorhandene Abhängigkeiten verhindern die Ausführung der Anweisung.

Beispiel für RECREATE SEQUENCE

Neuerstellen der Sequenz EMP_NO_GEN
RECREATE SEQUENCE EMP_NO_GEN
  START WITH 10
  INCREMENT BY 2;

SET GENERATOR

Verwendet für

Setzen des aktuellen Werts einer Sequenz oder eines Generators auf einen bestimmten Wert

Verfügbar in

DSQL, ESQL

Syntax
SET GENERATOR seq_name TO new_val
Table 1. SET GENERATOR-Anweisungsparameter
Parameter Beschreibung

seq_name

Name des Generators (Sequenz)

new_val

Neuer Sequenz-(Generator-)Wert.Eine 64-Bit-Ganzzahl von -2-63 bis 263-1.

Die Anweisung SET GENERATOR setzt den aktuellen Wert einer Sequenz oder eines Generators auf den angegebenen Wert.

Note

Obwohl SET GENERATOR als veraltet gilt, wird es aus Gründen der Abwärtskompatibilität beibehalten.Die Verwendung der standardkonformen ALTER SEQUENCE wird empfohlen.

Wer kann einen SET GENERATOR verwenden?

Die SET GENERATOR-Anweisung kann ausgeführt werden durch:

  • Administratoren

  • Der Besitzer der Sequenz (Generator)

  • Benutzer mit dem Privileg ALTER ANY SEQUENCE (ALTER ANY GENERATOR)

Beispiel für SET GENERATOR

Wert der Sequenz EMP_NO_GEN auf 145 setzen:
SET GENERATOR EMP_NO_GEN TO 145;
Note

Ähnliche Effekte lassen sich mit [fblangref40-ddl-sequence-alter-de] erzielen:

ALTER SEQUENCE EMP_NO_GEN
  RESTART WITH 145 + increment;

Der Wert von increment ist hier das aktuelle Inkrement der Sequenz.Wir müssen es hinzufügen, da ALTER SEQUENCE den aktuellen Wert berechnet, der basierend auf dem nächsten Wert, den es erzeugen soll, gesetzt werden soll.