CREATE SEQUENCE (Anweisung)
Die Anweisung CREATE SEQUENCE definiert eine Sequenz auf dem Anwendungsserver.
Aufruf
Diese Anweisung kann in ein Anwendungsprogramm eingebettet oder mithilfe von dynamischen SQL-Anweisungen ausgeführt werden. Es handelt sich um eine ausführbare Anweisung, die nur dann dynamisch vorbereitet werden kann, wenn das DYNAMICRULES-Ausführungsverhalten für das Paket aktiviert ist (SQLSTATE 42509).
Berechtigung
- Berechtigung IMPLICIT_SCHEMA für die Datenbank, wenn der implizite oder explizite Schemaname der Sequenz nicht vorhanden ist
- Zugriffsrecht CREATEIN für das Schema, wenn der Schemaname der Sequenz auf ein vorhandenes Schema verweist
- SCHEMAADM-Berechtigung für das Schema, wenn der Schemaname der Sequenz auf ein vorhandenes Schema verweist
- Berechtigung DBADM
Um eine vorhandene Sequenz zu ersetzen, muss die Berechtigungs-ID der Anweisung der Eigner der vorhandenen Sequenz sein (SQLSTATE 42501).
Syntax
Beschreibung
- OR REPLACE
- Gibt an, dass die Definition für die Sequenz ersetzt werden soll, wenn eine auf dem aktuellen Server vorhanden ist. Die vorhandene Definition wird effektiv gelöscht, bevor die neue Definition im Katalog ersetzt wird, mit der Ausnahme, dass Berechtigungen, die für die Sequenz erteilt wurden, nicht betroffen sind. Diese Option wird ignoriert, wenn eine Definition für die Sequenz auf dem aktuellen Server nicht vorhanden ist. Diese Option kann nur vom Eigner des Objekts angegeben werden.
- sequenzname
- Benennt die Sequenz. Die Kombination aus Name und implizitem oder explizitem Schemanamen darf keine vorhandene Sequenz auf dem aktuellen Server angeben (SQLSTATE-Wert 42710).
Die nicht qualifizierte Form des Sequenznamens ist eine SQL-Kennung. Das qualifizierte Formular ist ein Qualifikationsmerkmal gefolgt von einem Punkt und einer SQL-Kennung. Das Qualifikationsmerkmal ist ein Schemaname.
Wenn der Sequenzname explizit mit einem Schemanamen qualifiziert ist, kann der Schemaname nicht mit 'SYS' beginnen oder ein Fehler (SQLSTATE 42939) wird ausgelöst.
- AS datentyp
- Gibt den Datentyp an, der für den Sequenzwert verwendet wird. Der Datentyp kann ein beliebiger exakter numerischer Typ (SMALLINT, INTEGER, BIGINT oder DECIMAL) mit einer Skala von null oder ein benutzerdefinierter einzigartiger Datentyp oder Referenztyp sein, für den der Quellentyp ein exakter numerischer Typ mit einer Skala von null ist (SQLSTATE 42815). Für den einzigartigen Datentyp darf es keine Datentypintegritätsbedingungen geben und der Quellentyp darf kein verankerter Datentyp sein (SQLSTATE 428H2). Der Standardwert ist INTEGER.
- START WITH numerische_konstante
- Gibt den ersten Wert für die Sequenz an Dieser Wert kann ein beliebiger positiver oder negativer Wert sein, der einer Spalte des Datentyps zugeordnet werden kann, der der Sequenz zugeordnet ist (SQLSTATE 42815), ohne dass rechts vom Dezimalzeichen Ziffern ungleich null vorhanden sind (SQLSTATE 428FA). Der Standardwert ist MINVALUE für aufsteigende Sequenzen und MAXVALUE für absteigende Sequenzen.
Dieser Wert ist nicht unbedingt der Wert, den eine Sequenz nach Erreichen des maximalen oder minimalen Werts der Sequenz durchlaufen würde. Die Klausel START WITH kann verwendet werden, um eine Sequenz außerhalb des Bereichs zu starten, der für Zyklen verwendet wird. Der für Zyklen verwendete Bereich wird durch MINVALUE und MAXVALUE definiert.
- INCREMENT BY numerische Konstante
- Gibt das Intervall zwischen aufeinanderfolgenden Werten der Sequenz an. Dieser Wert kann ein beliebiger positiver oder negativer Wert sein, der einer Spalte des Datentyps zugeordnet werden kann, der der Sequenz zugeordnet ist (SQLSTATE-Wert 42815). Der Wert darf den Wert einer großen ganzzahligen Konstante (SQLSTATE-Wert 42820) nicht überschreiten und darf keine Ziffern ungleich null rechts vom Dezimalzeichen enthalten (SQLSTATE 428FA).
Wenn dieser Wert negativ ist, handelt es sich um eine absteigende Reihenfolge. Wenn dieser Wert 0 oder positiv ist, ist dies eine aufsteigende Sequenz. Der Standardwert ist 1.
- MINVALUE oder NO MINVALUE
- Gibt den Mindestwert an, bei dem eine absteigende Sequenz entweder die Generierung von Werten zyklisch wiederholt oder stoppt, oder eine aufsteigende Sequenz nach Erreichen des Maximalwerts.
- MINVALUE numerische_konstante
- Gibt die numerische Konstante an, die den Mindestwert darstellt. Dieser Wert kann ein beliebiger positiver oder negativer Wert sein, der einer Spalte des Datentyps zugeordnet werden kann, der der Sequenz zugeordnet ist (SQLSTATE-Wert 42815), ohne dass rechts vom Dezimalzeichen Ziffern ungleich null vorhanden sind (SQLSTATE 428FA), aber der Wert muss kleiner-gleich dem Maximalwert sein (SQLSTATE 42815).
- NO MINVALUE
- Bei einer aufsteigenden Sequenz ist der Wert der Wert START WITH oder 1, wenn START WITH nicht angegeben ist. Bei einer absteigenden Sequenz ist der Wert der Mindestwert des Datentyps, der der Sequenz zugeordnet ist. Dies ist die Standardeinstellung.
- MAXVALUE oder NO MAXVALUE
- Gibt den Maximalwert an, bei dem eine aufsteigende Sequenz entweder die Generierung von Werten zyklisch oder stoppt oder eine absteigende Sequenz nach Erreichen des Minimalwerts zyklisch durchläuft.
- MAXVALUE numerische_konstante
- Gibt die numerische Konstante an, die den Maximalwert darstellt. Dieser Wert kann jeder positive oder negative Wert sein, der einer Spalte des Datentyps zugeordnet werden könnte, der der Sequenz zugeordnet ist (SQLSTATE-Wert 42815), ohne dass rechts vom Dezimalzeichen Ziffern ungleich null vorhanden sind (SQLSTATE 428FA), aber der Wert muss größer-gleich dem Mindestwert sein (SQLSTATE-Wert 42815).
- NO MAXVALUE
- Bei einer aufsteigenden Sequenz ist der Wert der Maximalwert des Datentyps, der der Sequenz zugeordnet ist. Bei einer absteigenden Sequenz ist der Wert der Wert START WITH oder -1, wenn START WITH nicht angegeben ist.
- CYCLE oder NO CYCLE
- Gibt an, ob die Sequenz weiterhin Werte generieren soll, nachdem entweder der Maximalwert oder der Mindestwert erreicht wurde. Die Grenze der Sequenz kann entweder mit dem nächsten Wert erreicht werden, der genau auf der Grenzbedingung landet, oder durch Überschießen.
- CYCLE
- Gibt an, dass für diese Sequenz weiterhin Werte generiert werden, nachdem der Maximalwert oder Mindestwert erreicht wurde. Wenn diese Option verwendet wird, generiert eine aufsteigende Sequenz ihren Mindestwert, nachdem sie ihren Maximalwert erreicht hat. Wenn eine absteigende Sequenz ihren Mindestwert erreicht, generiert sie ihren Maximalwert. Die Maximal-und Minimalwerte für die Sequenz bestimmen den Bereich, der für den Zyklus verwendet wird.
Wenn CYCLE wirksam ist, können doppelte Werte für die Sequenz generiert werden.
- NO CYCLE
- Gibt an, dass keine Werte für die Sequenz generiert werden, sobald der Maximalwert oder Mindestwert für die Sequenz erreicht ist. Dies ist die Standardeinstellung.
- CACHE oder NO CACHE
- Gibt an, ob einige zugeordnete Werte im Speicher beibehalten werden sollen, um den Zugriff zu beschleunigen. Dies ist eine Leistungs- und Optimierungsoption.
- CACHE ganzzahlige_konstante
- Gibt die maximale Anzahl Sequenzwerte an, die vorab zugeordnet und im Hauptspeicher gehalten werden. Die Vorabzuordnung und Speicherung von Werten im Cache verringert die synchrone Ein-/Ausgabe für das Protokoll, wenn Werte für die Sequenz generiert werden.
Bei einem Systemausfall gehen alle zwischengespeicherten Sequenzwerte, die nicht in festgeschriebenen Anweisungen verwendet wurden, verloren (d. h., sie werden nie verwendet). Der für die Option CACHE angegebene Wert ist die maximale Anzahl Sequenzwerte, die bei einem Systemausfall verloren gehen könnten.
Der Mindestwert ist 2 (SQLSTATE 42815). Der Standardwert ist CACHE 20.
Verwenden Sie die Optionen CACHE und NO ORDER, um mehrere Caches von Sequenzwerten gleichzeitig zuzulassen. In einer Umgebung mit mehreren Partitionen oder Db2® pureScale® können sie von mehreren Membern zwischengespeichert werden.
Wenn in einer Db2 pureScale -Umgebungsowohl CACHE als auch ORDER angegeben werden, überschreibt die Spezifikation von ORDER die Spezifikation von CACHE und stattdessen wird NO CACHE wirksam.
- NO CACHE
- Gibt an, dass Werte der Sequenz nicht vorab zugeordnet werden sollen. Sie stellt sicher, dass bei einem Systemausfall, einem Systemabschluss oder einer Datenbankinaktivierung keine Werte verloren gehen. Wenn diese Option angegeben wird, werden die Werte der Sequenz nicht im Cache gespeichert. In diesem Fall führt jede Anforderung für einen neuen Wert für die Sequenz zu synchroner Ein-/Ausgabe für das Protokoll.
- NO ORDER oder ORDER
- Gibt an, ob die Folgenummern in der Reihenfolge der Anforderung generiert werden müssen.
- ORDER
- Gibt an, dass die Folgenummern in der Reihenfolge der Anforderung generiert werden.
- NO ORDER
- Gibt an, dass die Folgenummern nicht in der Reihenfolge der Anforderung generiert werden müssen. Dies ist die Standardeinstellung.
Hinweise
- Es ist möglich, eine konstante Sequenz zu definieren, d. h. eine, die immer einen konstanten Wert zurückgibt. Dies kann durch Angabe des Werts null für INCREMENT und eines Werts für START WITH, der MAXVALUE nicht überschreitet, oder durch Angabe desselben Werts für START WITH, MINVALUE und MAXVALUE erfolgen. Bei einer konstanten Sequenz wird bei jedem Aufruf von NEXT VALUE für die Sequenz derselbe Wert zurückgegeben. Eine konstante Sequenz kann als numerische globale Variable verwendet werden. ALTER SEQUENCE kann verwendet werden, um die Werte anzupassen, die für eine konstante Sequenz generiert werden.
- Eine Sequenz kann mit der Anweisung ALTER SEQUENCE manuell zyklisch wiederholt werden. Wenn NO CYCLE implizit oder explizit angegeben ist, kann die Sequenz mit der Anweisung ALTER SEQUENCE erneut gestartet oder erweitert werden, damit Werte weiterhin generiert werden, sobald der Maximal-oder Mindestwert für die Sequenz erreicht wurde.
- Eine Sequenz kann explizit für cycle definiert werden, indem das Schlüsselwort CYCLE angegeben wird. Verwenden Sie die Option CYCLE, wenn Sie eine Sequenz definieren, um anzugeben, dass die generierten Werte durchlaufen sollen, sobald die Grenze erreicht ist. Wenn eine Sequenz für einen automatischen Zyklus definiert ist (d. h., CYCLE wurde explizit angegeben), ist der für eine Sequenz generierte Maximal-oder Mindestwert möglicherweise nicht der tatsächlich angegebene MAXVALUE oder MINVALUE, wenn das Inkrement ein anderer Wert als 1 oder -1 ist. Die mit
START WITH=1, INCREMENT=2, MAXVALUE=10definierte Sequenz generiert beispielsweise den Maximalwert 9 und nicht den Wert 10. Berücksichtigen Sie bei der Definition einer Sequenz mit CYCLE sorgfältig die Auswirkungen der Werte für MINVALUE, MAXVALUE und START WITH. - Lücken in einer Sequenz: Fortlaufende Werte in einer Sequenz unterscheiden sich um den für die Sequenz angegebenen konstanten Wert INCREMENT BY. Es können jedoch Lücken in den Werten auftreten, die einem Sequenzobjekt von Db2zugeordnet werden.Die folgenden Situationen sind Beispiele dafür, wie Lücken in den Sequenzwerten eingefügt werden können:
- Eine Transaktion hat die Sequenz erweitert und dann rückgängig gemacht.
- Die SQL-Anweisung, die zur Generierung des nächsten Werts führt, schlägt fehl, nachdem der Wert generiert wurde.
- Der Ausdruck NEXT VALUE wird in der Anweisung SELECT eines Cursors in einer DRDA-Umgebung verwendet, in der der Client Blockabrufe verwendet und nicht alle abgerufenen Zeilen von der Anwendung abgerufen werden.
- Die Sequenz wird geändert und anschließend die Änderung rückgängig gemacht.
- Die Sequenz (oder eine Identitätsspaltentabelle) wird gelöscht und anschließend wird die Löschung rückgängig gemacht.
- Der Tabellenbereich SYSIBM.SYSSEQ wird aus irgendeinem Grund (auch wenn DSMAX erreicht ist) gestoppt oder geschlossen.
- Das Db2 -Subsystem ist gestoppt oder wird inaktiv.
Werte solcher Lücken sind für den aktuellen Zyklus nicht verfügbar, es sei denn, die Sequenz wird geändert und auf eine bestimmte Weise neu gestartet, um sie verfügbar zu machen.
Eine Sequenz wird unabhängig von einer Transaktion erhöht. Daher kann eine bestimmte Transaktion die Sequenz zweimal inkrementieren und eine Lücke in den beiden Zahlen erkennen, die sie empfängt, wenn andere Transaktionen gleichzeitig dieselbe Sequenz inkrementieren. Die meisten Anwendungen können diese Instanzen tolerieren, da diese nicht wirklich Lücken sind.
- Das Caching von Folgenummern impliziert, dass ein Bereich von Folgenummern für einen schnellen Zugriff im Speicher gehalten werden kann. Wenn eine Anwendung auf eine Sequenz zugreift, die die nächste Folgenummer aus dem Cache zuordnen kann, kann die Zuordnung der Folgenummer schnell erfolgen. Wenn eine Anwendung jedoch auf eine Sequenz zugreift, die die nächste Folgenummer nicht aus dem Cache zuordnen kann, muss die Folgenummerzuordnung möglicherweise auf E/A-Operationen im persistenten Speicher warten. Die Auswahl des Werts für CACHE sollte unter Berücksichtigung der Leistungs-und Anwendungsanforderungen vorgenommen werden.
- Der Benutzer, der eine Sequenz definiert, erhält die Zugriffsrechte ALTER und USAGE mit der Grant-Option. Der Eigner der Sequenz kann die Sequenz löschen.
- Syntaxalternativen: Die nachfolgend aufgeführten Syntaxalternativen werden
aus Gründen der Kompatibilität mit früheren DB2-Versionen
und mit anderen Datenbankprodukten unterstützt. Diese Alternativen sind vom Standard abweichend und sollten nicht verwendet werden.
- Ein Komma kann verwendet werden, um mehrere Sequenzoptionen zu trennen.
- NOMINVALUE, NOMAXVALUE, NOCYCLE, NOCACHE und NOORDER können anstelle von NO MINVALUE, NO MAXVALUE, NO CYCLE, NO CACHE bzw. NO ORDER angegeben werden.
- Hinweise für eine Umgebung mit mehreren Partitionen oder Db2 pureScale:
- Falls die Optionen CACHE und NO ORDER wirksam sind, können gleichzeitig mehrere Cachespeicher aktiv sein. Dies kann bei jedem Member in einer -oder Db2 pureScale -Umgebungauftreten. Die Anforderungen für die nächsten Wertzuweisungen von verschiedenen Mitgliedern führen möglicherweise nicht zur Zuweisung von Werten in strikter numerischer Reihenfolge. Angenommen, in einer Umgebung mit mehreren Partitionen oder Db2 pureScale verwenden die -Member DB1A und DB1B dieselbe Sequenz und DB1A erhält die Cachewerte 1 bis 20 und DB1B erhält die Cachewerte 21 bis 40. Falls DB1A in diesem Szenario zuerst den nächsten Wert anfordert, anschließend DB1B einen Wert anfordert und danach wieder DB1A einen Wert anfordert, werden die Werte tatsächlich in der Reihenfolge 1,21,2 zugeordnet. Geben Sie daher die Option ORDER an, um sicherzustellen, dass Folgenummern in strikter numerischer Reihenfolge unter mehreren Membern unter gleichzeitiger Verwendung derselben Sequenz generiert werden.
- In einer Db2 pureScale -Umgebungstellt die Verwendung der Option ORDER oder NO CACHE sicher, dass die Werte, die einer Sequenz zugeordnet sind, die von Anwendungen über mehrere Member gemeinsam genutzt wird, in strikter numerischer Reihenfolge sind. Wenn ORDER angegeben ist, wird NO CACHE impliziert, auch wenn CACHE n angegeben ist.
Beispiel
CREATE SEQUENCE ORG_SEQ
START WITH 1
INCREMENT BY 1
NO MAXVALUE
NO CYCLE
CACHE 24