Anfang des Inhaltsbereichs

Diese Grafik wird im zugehörigen Text erklärt Nummerngeneratoren für Tabellen Dokument im Navigationsbaum lokalisieren

Mit Hilfe der CREATE SEQUENCE-Anweisung können Sie eine Sequenz und dadurch einen impliziten Nummerngenerator (automatisch generierte Abfolge von Zahlen) erzeugen.

Eine typische Anwendung ist die Erzeugung eines Primärschlüssels.

Bei jedem Zugriff auf eine Sequenz können Sie den nächsten verfügbaren Wert des Nummerngenerators ermitteln und weiterverwenden. Die Werte des Nummerngenerators können aus den Pseudospalten NEXTVAL und CURRVAL abgerufen werden. Diese Werte sind immer ganze Zahlen.

     NEXTVAL gibt den nächsten verfügbaren Wert an, der durch den Nummergenerator erzeugt wurde

     CURRVAL gibt den gerade verwendeten Wert an, der innerhalb der Datenbanksitzung durch den Nummerngenerator erzeugt wurde.

In INSERT- und UPDATE-Anweisungen können der nächste verfügbare und der gerade verwendete Sequenzwert in einer beliebigen Spalte einer Tabelle angegeben werden, wenn das der Datentyp dieser Spalte erlaubt. Jedoch ist es nicht möglich, den nächsten verfügbaren und den gerade verwendeten Wert als DEFAULT-Wert einer Spalte zu definieren. Beide Werte müssen immer explizit angegeben werden.

Voraussetzungen

Sie benötigen die Demo-Daten für das SQL-Tutorial.

Starten Sie das Query Tool SQL Studio als Datenbankadministrator MONA mit dem Kennwort RED und melden Sie sich an die Demo-Datenbankinstanz DEMODB an.

Anlegen einer Sequenz

...

 

...

Legen Sie die Sequenz  sequ  mit Hilfe der CREATE SEQUENCE-Anweisung an.

Geben Sie den Sequenznamen und den ersten Sequenzwert an (START WITH <integer>, Vorschlagswert ist 1). Geben Sie an, wie der nächste Wert in der Sequenz erzeugt werden soll (INCREMENT BY <integer>, Vorschlagswert ist 1)

 

CREATE SEQUENCE hotel.sequ
  START WITH 1
  INCREMENT BY 1

 

Siehe auch:

SQL-Referenzhandbuch, StrukturlinkCREATE SEQUENCE-Anweisung (create_sequence_statement)

 

Verwenden einer Sequenz

Legen Sie für die folgenden Beispiele die Tabellen pers1 und pers2 an.

 

CREATE TABLE hotel.pers1
(pno       FIXED(6),
 firstname CHAR(20),
 name      CHAR(20))
//
CREATE TABLE hotel.pers2
(pno       FIXED(6),
 firstname CHAR(20),
 name      CHAR(20))

 

Ein Nummerngenerator für verschiedenen Tabellen

Sie können den durch die Sequenz sequ erzeugten Nummerngenerator in Ihren SQL-Anweisungen verwenden. Geben Sie dazu nach dem Sequenznamen das Schlüsselwort NEXTVAL an.

Wenn Sie den Nummerngenerator in verschiedenen Tabellen verwenden wollen, geben Sie diesen in der Form <sequence_name>.NEXTVAL in den gewünschten Tabellen an.

 

INSERT INTO hotel.pers1 VALUES (hotel.sequ.NEXTVAL,'Mary','Jackson')

//

INSERT INTO hotel.pers2 VALUES (hotel.sequ.NEXTVAL,'Billy','Jackson')

//

INSERT INTO hotel.pers1 VALUES (hotel.sequ.NEXTVAL,'Lucy','Baker')

//

INSERT INTO hotel.pers2 VALUES (hotel.sequ.NEXTVAL,'Henry','Baker')

//

INSERT INTO hotel.pers1 VALUES (hotel.sequ.NEXTVAL,'Anna','Miller')

//

INSERT INTO hotel.pers2 VALUES (hotel.sequ.NEXTVAL,'Mike','Miller')

//

INSERT INTO hotel.pers1 VALUES (hotel.sequ.NEXTVAL,'Peggy','Miller')

//

SELECT * FROM hotel.pers1

Ergebnis

PNO

FIRSTNAME

NAME

1

Mary

Jackson

3

Lucy

Baker

5

Anna

Miller

7

Peggy

Miller

 

SELECT * FROM hotel.pers2

Ergebnis

PNO

FIRSTNAME

NAME

2

Billy

Jackson

4

Henry

Baker

6

Mike

Miller

 

Anzeige des gerade verwendeten Wertes des Nummerngenerators

Zur Anzeige des gerade verwendeten Wertes des Nummerngenerator können Sie die automatisch durch das Datenbanksystem erzeugte Tabelle DUAL verwenden. Die Tabelle DUAL kann durch alle Datenbankbenutzer verwendet werden. Da die Tabelle DUAL nur eine Zeile hat, können Sie diese Tabelle dazu verwenden, den Wert des Nummerngenerators mit Hilfe einer SELECT-Anweisung anzeigen zu lassen.

 

SELECT hotel.sequ.CURRVAL FROM dual

Ergebnis

 

EXPRESSION1

1

7

 

Wenn <sequence_name>.NEXTVAL innerhalb der aktuellen Datenbanksitzung noch nicht verwendet wurde, ist die Verwendung von <sequence_name>.CURRVAL nicht möglich.

 

Siehe auch:

SQL-Referenzhandbuch, StrukturlinkSpezifikation von Werten (extended_value_spec)

 

Wert eines Nummerngenerators mehrmals verwenden

Sie haben unter anderem folgende Möglichkeit, wenn Sie einen Wert des Nummerngenerators mehrmals verwenden wollen:

Geben Sie den gerade verwendeten Wert des Nummerngenerators <sequence_name>.CURRVAL in Ihrer SQL-Anweisung an.

 

INSERT INTO hotel.pers1 VALUES (hotel.sequ.NEXTVAL,'Mary','Ford')

//

INSERT INTO hotel.pers2 VALUES (hotel.sequ.CURRVAL,'Mary','Ford')

//

SELECT * FROM hotel.pers1

Ergebnis

PNO

FIRSTNAME

NAME

1

Mary

Jackson

3

Lucy

Baker

5

Anna

Miller

7

Peggy

Miller

8

Mary

Ford

 

SELECT * FROM hotel.pers2

Ergebnis

PNO

FIRSTNAME

NAME

2

Billy

Jackson

4

Henry

Baker

6

Mike

Miller

8

Mary

Ford

 

Siehe auch:

Nummerngenerator für eine einzelne Spalte einer Tabelle

 

Löschen des Nummerngenerators

Zum Löschen des Nummerngenerators müssen Sie die Sequenz mit Hilfe der DROP SEQUENCE-Anweisung löschen.

 

DROP SEQUENCE hotel.sequ

 

Siehe auch:

SQL-Referenzhandbuch, StrukturlinkDROP SEQUENCE-Anweisung (drop_sequence_statement)

Weitere Beispiele zur Datendefinition

Ende des Inhaltsbereichs