SAP HANA Tutorial: Sequenz erstellen
⚡ Intelligente Zusammenfassung
Sequenz erstellen in SAP HANA definiert ein Datenbankobjekt, das automatisch eine inkrementierte Liste numerischer Werte generiert. Parameter steuern den Startwert, die Inkrementierung, die Grenzwerte, die Zyklen und das Caching-Verhalten des Generators.

Was ist Sequenz?
Eine Sequenz ist ein Datenbankobjekt, das automatisch die inkrementierte Liste numerischer Werte gemäß der in der Sequenzspezifikation angegebenen Regel generiert.
Um beispielsweise die Mitarbeiternummer automatisch in die Spalte (EMPLOYEE_NO) der Tabelle einzufügen, wenn ein neuer Datensatz in die Tabelle eingefügt wird, verwenden wir die Reihenfolge.
Sequenzwerte werden in aufsteigender oder absteigender Reihenfolge generiert.
Sequenzen sind nicht mit Tabellen verknüpft; Sie werden von der Anwendung verwendet. Es gibt zwei Werte in Folge –
- CURRVAL – Geben Sie den aktuellen Wert der Sequenz an.
- NEXTVAL – Geben Sie den nächsten Wert der Sequenz an.
SYNTAX
CREATE SEQUENCE <sequence_name> [<sequence_parameter_list>] [RESET BY <subquery>]
SYNTAXELEMENTE
| ELEMENTS | BESCHREIBUNG |
|---|---|
| Es ist der Name der Sequenz. | |
| [ ] | Es gibt einen oder mehrere Sequenzparameter an. |
| BEGINNEN MIT | Es beschreibt den Startsequenzwert. |
| ERHÖHUNG UM | Dies gibt den Wert an, der vom letzten zugewiesenen Wert jedes Mal erhöht werden soll, wenn ein neuer Sequenzwert generiert wird. Der Standardwert ist 1. |
| MAXWERT | Dies legt den Maximalwert fest, der durch die Sequenz erzeugt werden kann. kann zwischen -4611686018427387903 und 4611686018427387902 liegen. |
| KEIN MAXWERT | Wenn NO MAXVALUE angegeben ist, beträgt der Maximalwert bei einer aufsteigenden Sequenz 4611686018427387903 und der Minimalwert bei einer absteigenden Sequenz -1. |
| MINWERT / KEIN MINWERT | Es legt den Minimalwert fest, den eine Sequenz erzeugen kann. Der Wert kann zwischen -4611686018427387904 und 4611686018427387902 liegen. Bei Verwendung von NO MINVALUE ist der Minimalwert für eine aufsteigende Folge 1. |
| CYCLE | Die CYCLE-Anweisung legt fest, dass die Sequenznummer neu gestartet wird, sobald sie ihren Maximal- oder Minimalwert erreicht hat. |
| KEIN ZYKLUS | Standardoption. Die Direktive NO CYCLE gibt an, dass die Sequenznummer nicht neu gestartet wird, nachdem sie ihren Maximal- oder Minimalwert erreicht hat. |
| CACHE | Die Cache-Größe gibt an, welcher Bereich von Sequenznummern in einem Knoten zwischengespeichert wird. muss eine vorzeichenlose Ganzzahl sein. |
| KEIN CACHE | Standardoption. Die Direktive NO CACHE gibt an, dass die Sequenznummer nicht in einem Knoten zwischengespeichert wird. |
| ZURÜCKSETZEN DURCH | Es gibt an, dass die Datenbank beim Neustart der Datenbank automatisch Folgendes ausführt und der Sequenzwert wird mit dem zurückgegebenen Wert neu gestartet. |
Beispiel -
Wir erstellen eine Sequenz mit dem Namen DHK_SCHEMA.EMP_NO, die jedes Mal, wenn die Sequenz verwendet wird, einen um +1 erhöhten Wert der Sequenz erstellt.
Sequenzskript –
CREATE SEQUENCE DHK_SCHEMA.EMP_NO START WITH 100 INCREMENT BY 1;
Hier verwenden wir im folgenden Beispiel das Objekt „sequence“, um den Wert der Mitarbeiternummer bei jeder Ausführung der Auswahlabfrage um +1 zu erhöhen. In der Abfrage kann „nextval“ für die Generierung von Seriennummern oder für Anforderungen derselben Art verwendet werden.
Verwendung der Reihenfolge –
SELECT DHK_SCHEMA.EMP_NO.nextval FROM DUMMY;
AUSGABE – 100, 101, 102 … und so weiter für jede Ausführung der obigen SELECT-Abfrage.
Wie man eine Sequenz in einer Tabelle verwendet
Das obige Beispiel gibt eine Zahl zurück, speichert sie aber nirgends. Drei Muster verknüpfen eine Sequenz mit realen Daten; die richtige Wahl hängt davon ab, wie viel Kontrolle die Anwendung benötigt.
1) Rufen Sie NEXTVAL direkt im INSERT auf. Der expliziteste Ansatz. Die Anwendung entscheidet, wann eine Zahl verbraucht wird.
CREATE COLUMN TABLE DHK_SCHEMA.EMPLOYEE ( EMPLOYEE_NO INTEGER NOT NULL, EMP_NAME NVARCHAR(100), PRIMARY KEY (EMPLOYEE_NO) ); INSERT INTO DHK_SCHEMA.EMPLOYEE VALUES (DHK_SCHEMA.EMP_NO.NEXTVAL, 'Anita Sharma');
2) Die Sequenz als Spaltenstandard verwenden. Die Nummer wird auch dann vergeben, wenn die Einfügung die Spalte nicht erwähnt, was für Anwendungen geeignet ist, die nie dafür geschrieben wurden, die Sequenz zu kennen.
CREATE COLUMN TABLE DHK_SCHEMA.EMPLOYEE2 ( EMPLOYEE_NO INTEGER DEFAULT DHK_SCHEMA.EMP_NO.NEXTVAL, EMP_NAME NVARCHAR(100) ); INSERT INTO DHK_SCHEMA.EMPLOYEE2 (EMP_NAME) VALUES ('Ravi Kumar');
3) Lesen Sie den soeben ausgegebenen Wert ab. CURRVAL gibt die letzte Nummer dieser Sitzung zurück, die als Grundlage für die Verknüpfung einer untergeordneten Zeile mit der soeben eingefügten übergeordneten Zeile dient.
SELECT DHK_SCHEMA.EMP_NO.CURRVAL FROM DUMMY;
⚠️ Warnung: CURRVAL schlägt mit einem Fehler fehl, bis NEXTVAL in der aktuellen Sitzung mindestens einmal aufgerufen wurde. Es gibt den Wert zurück, der dieser Sitzung zugewiesen wurde, nicht das globale Maximum, sodass zwei Sitzungen gleichzeitig unterschiedliche aktuelle Werte enthalten können.
Sequenz- vs. Identitätsspalte
SAP HANA bietet außerdem eine Identitätsspalte, die Zahlen ohne separates Objekt generiert. Beide Ansätze lösen dasselbe Problem auf unterschiedliche Weise.
| Parameter | Reihenfolge | Identitätsspalte |
|---|---|---|
| Objekttyp | Unabhängiges Datenbankobjekt | Spalteneigenschaft einer Tabelle |
| Über mehrere Tabellen hinweg geteilt | Ja, beliebig viele Tabellen können darauf zugreifen. | Nein, es gehört zu einer einzelnen Spalte. |
| Wert vor dem Einfügen sichtbar | Ja, über NEXTVAL | Nein, wurde während des Einfügens generiert. |
| Definition | Sequenz erstellen | STANDARDMÄSSIG ALS IDENTITÄT GENERIERT |
| am besten für | Gemeinsame Nummerierung, Einfügungen für Eltern und Kinder | Ein einfacher Ersatzschlüssel in einer Tabelle |
Wählen Sie eine Sequenz, wenn die Nummer vor dem Vorhandensein der Zeile bekannt sein muss oder wenn mehrere Tabellen dieselbe Nummerierungsreihe verwenden. Wählen Sie eine Identitätsspalte für einen einfachen künstlichen Schlüssel ohne weitere Anforderungen.
Sequenzverwaltung: ALTER, DROP und Lücken
Eine Sequenz bleibt selten so, wie sie ursprünglich erstellt wurde. Drei Wartungsaufgaben tauchen immer wieder auf.
Das Verhalten ändern. ALTER SEQUENCE passt die Schrittweite, die Grenzwerte oder die Zyklen einer bestehenden Sequenz ohne Datenverlust an.ping it.RESTART WITH setzt den Zähler zurück, was der übliche Schritt nach dem Neuladen von Testdaten ist.
ALTER SEQUENCE DHK_SCHEMA.EMP_NO RESTART WITH 1000; ALTER SEQUENCE DHK_SCHEMA.EMP_NO INCREMENT BY 10; DROP SEQUENCE DHK_SCHEMA.EMP_NO;
Verständnislücken. Die fortlaufende Nummerierung der Sequenznummern ist nicht garantiert, was diejenigen überrascht, die einen lückenlosen Prüfpfad erwarten. Lücken entstehen aus drei Gründen:
- Rückgängig gemachte Transaktionen. NEXTVAL ist nicht transaktionsbezogen. Eine Zahl, die durch einen Einfügevorgang verbraucht und später rückgängig gemacht wird, wird niemals erneut ausgegeben.
- Zwischenspeichern. Bei CACHE 100 reserviert ein Knoten hundert Werte gleichzeitig. Ein Neustart verwirft alle in diesem Block verbleibenden, nicht verwendeten Werte.
- Parallele Sitzungen. Zwei gleichzeitig einlaufende Sitzungen verschieben ihre Zahlen, sodass keine der beiden einen ununterbrochenen Lauf sieht.
Grundsätzlich sollte eine Sequenz als Quelle eindeutiger Kennungen und niemals als Zähler für die Anzahl vorhandener Zeilen verwendet werden. Ist eine ununterbrochene Sequenz gesetzlich vorgeschrieben, wie beispielsweise bei der Rechnungsnummerierung, muss sie durch Anwendungslogik mit eigenen Kontrollmechanismen und nicht durch eine Datenbanksequenz generiert werden.
Herausfinden, was existiert. Die Systemansicht SEQUENCES listet jede Sequenz mit ihrem aktuellen Wert auf und ist somit die schnellste Methode zur Überprüfung eines Schemas. Die zugehörige Syntax wird in [Referenz einfügen] behandelt. SAP HANA SQL und Spaltendefinitionen in SAP HANA-Datentypen.
