Kategorien:

DDL für Tabellen, Ansichten und Sequenzen

CREATE SEQUENCE

Erstellt eine neue Sequenz, die zur Generierung von fortlaufenden, eindeutigen Nummern verwendet werden kann.

Weitere Details dazu finden Sie unter Verwenden von Sequenzen.

Siehe auch:

ALTER SEQUENCE

Syntax

CREATE [ OR REPLACE ] SEQUENCE [ IF NOT EXISTS ] <name>
  [ WITH ]
  [ START [ WITH ] [ = ] <initial_value> ]
  [ INCREMENT [ BY ] [ = ] <sequence_interval> ]
  [ COMMENT = '<string_literal>' ]

Erforderliche Parameter

Name

Gibt den Bezeichner für die Sequenz an. Dieser muss für das Schema, in dem die Sequenz erstellt wird, eindeutig sein.

Darüber hinaus muss der Bezeichner mit einem Buchstaben beginnen und darf keine Leer- oder Sonderzeichen enthalten, es sei denn, die gesamte Bezeichnerzeichenfolge wird in doppelte Anführungszeichen gesetzt (z. B. "My object"). Bei Bezeichnern, die in doppelte Anführungszeichen eingeschlossen sind, ist auch die Groß- und Kleinschreibung zu beachten.

Weitere Details dazu finden Sie unter Anforderungen an Bezeichner.

Optionale Parameter

START [ WITH ] [ = ] Anfangswert

Gibt den ersten Wert an, der von der Sequenz zurückgegeben wird. Unterstützte Werte sind alle Werte, die durch die Komplementärganzzahl eines 64-Bit-Zweiers dargestellt werden können (von -2^63 bis 2^63-1).

Standard: 1

INCREMENT [ BY ] [ = ] Sequenzintervall

Gibt das Schrittintervall der Sequenz an:

  • Für das positive Sequenzintervall n werden die nächsten n-1-Werte bei jedem Sequenzaufruf reserviert.

  • Für das negative Sequenzintervall -n werden die nächstniedrigeren n-1-Werte bei jedem Sequenzaufruf reserviert.

Unterstützte Werte sind alle Werte, die durch das 64-Bit-Zweier-Komplement einer Ganzzahl dargestellt werden können. 0 ist als Sequenzintervall nicht erlaubt.

Standard: 1

COMMENT = 'Zeichenfolgenliteral'

Gibt einen Kommentar zur Sequenz an.

Standard: Kein Wert

Nutzungshinweise

  • Der Anfangswert einer Sequenz kann nach dem Erstellen der Sequenz nicht mehr geändert werden.

  • Eine Sequenz erzeugt nicht unbedingt eine lückenlose Sequenz. Die Werte werden erhöht und sind eindeutig (bis zum Umschlagen auf den Anfangswert), aber nicht unbedingt zusammenhängend.

Beispiele

Hier ist ein einfaches Beispiel für die Verwendung von Sequenzen:

CREATE OR REPLACE SEQUENCE seq_01 START = 1 INCREMENT = 1;
CREATE OR REPLACE TABLE sequence_test_table (i INTEGER);
SELECT seq_01.nextval;

Ausgabe:

+---------+
| NEXTVAL |
|---------|
|       1 |
+---------+

Führen Sie dieselbe Abfrage erneut aus. Beachten Sie, wie sich die Sequenznummern ändern:

SELECT seq_01.nextval;

Ausgabe:

+---------+
| NEXTVAL |
|---------|
|       2 |
+---------+

Verwenden Sie nun die Sequenz beim Einfügen in eine Tabelle:

INSERT INTO sequence_test_table (i) VALUES (seq_01.nextval);
SELECT i FROM sequence_test_table;

Ausgabe:

SELECT i FROM sequence_test_table;
+---+
| I |
|---|
| 3 |
+---+

Erstellen Sie eine Sequenz, die um 5 statt um 1 erhöht wird:

CREATE OR REPLACE SEQUENCE seq_5 START = 1 INCREMENT = 5;
SELECT seq_5.nextval a, seq_5.nextval b, seq_5.nextval c, seq_5.nextval d;

Ausgabe:

+---+---+----+----+
| A | B |  C |  D |
|---+---+----+----|
| 1 | 6 | 11 | 16 |
+---+---+----+----+

Führen Sie dieselbe Abfrage erneut aus. Beachten Sie, wie sich die Sequenznummern ändern. Sie können erwarten, dass der nächste Satz von Sequenznummern mit einer Zahl beginnt, die um 5 höher ist als die Nummer, mit der die vorherige Anweisung aufgehört hat. Die nächste Sequenznummer beginnt jedoch mit einer um 20 höheren Zahl (5 * 4, wobei 5 die Größe des Inkrements und 4 die Anzahl der NEXTVAL-Operationen in der Anweisung ist):

SELECT seq_5.nextval a, seq_5.nextval b, seq_5.nextval c, seq_5.nextval d;

Ausgabe:

+----+----+----+----+
|  A |  B |  C |  D |
|----+----+----+----|
| 36 | 41 | 46 | 51 |
+----+----+----+----+

In diesem Beispiel wird veranschaulicht, dass Sie eine Sequenz als Standardwert für eine Spalte verwenden können, um eindeutige Bezeichner für jede Zeile in einer Tabelle bereitzustellen:

CREATE OR REPLACE SEQUENCE seq90;
CREATE OR REPLACE TABLE sequence_demo (i INTEGER DEFAULT seq90.nextval, dummy SMALLINT);
INSERT INTO sequence_demo (dummy) VALUES (0);

-- Keep doubling the number of rows:
INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;
INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;
INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;
INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;
INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;
INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;
INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;
INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;
INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;
INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;
SELECT i FROM sequence_demo ORDER BY i LIMIT 10;

Ausgabe:

SELECT i FROM sequence_demo ORDER BY i LIMIT 10;
+----+
|  I |
|----|
|  1 |
|  2 |
|  3 |
|  4 |
|  5 |
|  6 |
|  7 |
|  8 |
|  9 |
| 10 |
+----+

Dies zeigt, dass für jede Zeile unterschiedliche Werte vorliegen:

SELECT COUNT(i), COUNT(DISTINCT i), MIN(i), MAX(i) FROM sequence_demo;

Ausgabe:

SELECT COUNT(i), COUNT(DISTINCT i), MIN(i), MAX(i) FROM sequence_demo;
+----------+-------------------+--------+--------+
| COUNT(I) | COUNT(DISTINCT I) | MIN(I) | MAX(I) |
|----------+-------------------+--------+--------|
|     1024 |              1024 |      1 |   1024 |
+----------+-------------------+--------+--------+

Weitere Beispiele finden Sie unter Verwenden von Sequenzen.