CREATE SEQUENCE-Anweisung (SQL, Oracle)

Eine Sequenz ist ein Datenbankobjekt, mit dem eindeutige, fortlaufende Nummern erzeugt werden können. Sie werden unter anderem für die Nummerngenerierung bei künstlichen Primärschlüsseln (surrogate keys) verwendet.

So sicher die Sequenzen auch im Multi-User-Betrieb und bei Systemausfällen funktionieren, eíne Schwachstelle gibt es. Es sind eigenständige Datenbankobjekte und es kann keine Zuordnung spezifiziert werden z.B. zu einer zugehörigen Tabelle oder zu der Primärschlüsselspalte, die mit den generierten Werten dieser Sequenz gefüllt werden soll. Soll sichergestellt werden, dass eine Sequenz nur für eine Spalte verwendet wird, so ist bei der Programmierung entsprechend darauf zu achten. Andere Datenbanksysteme wie z.B. MySQL haben für die künstlichen Primärschlüsseln ein anderes Konzept entwickelt, eine sogenannte Autoinkrement-Spalte.

Syntax der CREATE SEQUENCE-Anweisung:

 <CREATE SEQUENCE-Anweisung (SQL, Oracle)> :=
CREATE SEQUENCE Sequencename
[ INCREMENT BY integer ]
[ START WITH integer]
[ MAXVALUE integer | NOMAXVALUE ]
[ MINVALUE integer |NOMINVALUE ]
[ CYCLE { NOCYCLE]
[ CACHE | NOCACHE]
[ ORDER | NOORDER ]

wobei die einzelnen Angaben bedeuten:

INCREMENT BY intbestimmt die ganze Zahl,um die eine SEQUENCE erhöht wird
START WITH intbestimmt die ganze Zahl,mit der die SEQUENCE startet
MAXVALUE intobere Grenze der SEQUENCE
NOMAXVALUESEQUENCE hat keine obere Grenze
MINVALUE intuntere Grenze der SEQUENCE bei absteigenden SEQUENCEN. Der DEAULT für MINVALUE ist 1, wenn MINVALUE nicht angegeben ist
NOMINVALUESEQUENCE hat keine untere Grenze
CYCLE|NOCYCLEbestimmt, ob nach Erreichen des MAXVALUE bzw. MINVALUE zyklisch weiter vergeben wird
CACHE int|NOCACHEbestimmt,wie viele Schlüsselwerte im Hauptspeicher bereitgestellt werden.Bei NOCACHE werden keine Werte vorgehalten

Um auf generiere Werte zugreifen zu können, verfügen SEQUENCES über zwei Pseudospalten:

  1. NEXTVAL enthält die nächste verfügbare fortlaufende Nummer
  2. CURVAL enthält die zuletzt verwendete fortlaufende Nummer

Sequenzen werden oft beim Einfügen von Daten, z.B. beim INSERT, benutzt. Eine Eigenheit von künstlichen Primärschlüsseln ist es ja, dass sie DBS-intern verwaltet werden, was dann auch heißt, dass sie DBS-intern gefüllt werden. Dies geschiet dann in der Regel über eine in einem zeilenorientierten Trigger (ROW TRIGGER) programmierte Zuweisung des generierten Werte in die künstliche Primärschlüsselspalte.

SEQUENZEN werden mit einem CREATE SEQUENCE(...)-Befehl angelegt und sind damit als eigenständige Datenbankobjekte nicht mit einer Tabelle verknüpft. Theoretisch können sie daher zum Generieren von fortlaufenden Nummern in mehreren Tabellen verwendet werden, auch wenn das aus Gründen der Übersichtlichkeit nicht empfehlenswert ist.

MIT DROP SEQUENCE <sequencename>; wird eine Sequenz wieder gelöscht.

Beispiel:

 CREATE SEQUENCE Kun_seq
   INCREMENT BY 1 START WITH 1 NOMAXVALUE NOCYCLE CACHE 10;

 INSERT INTO Kunden (Kun_Nr, Nachname)  VALUES (Kun_seq.NEXTVAL, 'Vogt'):
 -- Diese Anweisung erzeugt einen neuen Datensatz mit der Kun_Nr als fortlaufende Nummer in der Kundentabelle.

siehe auch: Namensraum

Quellen:

  • ANSI/ISO/IEC 9075-1:2003. Part 1 "SQL/Framework", ISO International Organization for Standardization / ANSI American National Standards Institute, September 2003
  • ANSI/ISO/IEC 9075-2:2003. Part 2 "SQL/Foundation", ISO International Organization for Standardization / ANSI American National Standards Institute, Dezember 2003
  • Elmasri, Ramez/Navathe, Shamkant B.: "Grundlagen von Datenbanksystemen" , Pearson Studium, München, 2002, ISBN 3-8273-7021-3
  • Faeskorn-Woyke, Heide/Bertelsmeier, Birgit/Riemer, Petra/Bauer, Elena: "Datenbanksysteme - Theorie und Praxis mit SQL2003, Oracle und MySQL", Pearson Education, München, 2007, ISBN 978-3-8273-7266-6
  • Kemper, Alfons/Eickler, André: "Datenbanksysteme", Oldenbourg, München, 2009, 978-3-486-59018-0
  • Melton, Jim/Simon, Alan R.: "SQL: 1999 - Understanding Relational Language Components", Morgan Kaufmann, San Francisco, 2001, ISBN 1558604561
  • Oracle® Database SQL Language Reference 11g Release 2 (11.2), E17118-03, August 2010, http://download.oracle.com/docs/cd/E11882_01/server.112/e17118.pdf
  • Saake, Gunter/Sattler, Kai-Uwe/Heuer, Andreas: "Datenbanken - Konzepte und Sprachen", mitp-Verlag, Redline GmbH, Heidelberg, 2007, ISBN 3-8266-1664-2
  • Vossen, Gottfried: "Datenmodelle, Datenbanksprachen und Datenbankmanagementsysteme", Oldenbourg, München, 2008, ISBN 978-3-486-27574-2

Kategorie SQL, C