Kategorien:

DDL für Tabellen, Ansichten und Sequenzen

CREATE SEQUENCE

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

Wichtig

Snowflake garantiert nicht, dass die Generierung von Sequenznummern ohne Lücken erfolgt. Die generierten Zahlen steigen im Wert (oder fallen im Wert, wenn die Schrittweite negativ ist), sind aber nicht unbedingt zusammenhängend.

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ß-/Kleinschreibung zu beachten.

Weitere Informationen zu Bezeichnern 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 eine 64-Bit-Zweierkomplement-Ganzzahl (-2^63 bis 2^63 - 1) dargestellt werden können.

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 Nicht-Null-Werte, die durch eine 64-Bit-Zweierkomplement-Ganzzahl dargestellt werden können.

Standard: 1

COMMENT = 'Zeichenfolgenliteral'

Gibt einen Kommentar zur Sequenz an.

Standard: Kein Wert

Nutzungshinweise

  • Der erste/ursprüngliche Anfangswert einer Sequenz kann nach dem Anlegen der Sequenz nicht mehr geändert werden.

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önnten erwarten, dass der nächste Satz von Sequenznummern mit einer Nummer 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 |
+----+----+----+----+

Im folgenden Beispiel wird veranschaulicht, dass Sie eine Sequenz als Standardwert für eine Spalte verwenden können, um für jede Zeile einer Tabelle eindeutige Bezeichner 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.