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.

  • 🔢 Kerndefinition: Eine Sequenz erzeugt Zahlen gemäß den in ihrer Spezifikation festgelegten Regeln, aufsteigend oder absteigend.
  • 🔗 Keine Tabellenbindung: Sequenzen sind unabhängige Objekte, die von der Anwendung verwendet werden und keiner Tabelle zugeordnet sind.
  • 📍 Zwei Werte: CURRVAL gibt den aktuellen Wert zurück und NEXTVAL erhöht die Sequenz und gibt den neuen Wert zurück.
  • 🎚️ Schlüsselparameter: START WITH, INCREMENT BY, MAXVALUE, MINVALUE, CYCLE und CACHE formen die Ausgabe.
  • ♻️ Radfahren: CYCLE bewirkt, dass die Nummerierung am Limit neu beginnt; NO CYCLE ist die Standardeinstellung und löst stattdessen einen Fehler aus.
  • Zwischenspeichern: CACHE reserviert einen Nummernblock pro Knoten für eine höhere Geschwindigkeit; NO CACHE ist die Standardeinstellung.
  • 🔄 Reset-Option: RESET BY führt beim Neustart der Datenbank eine Unterabfrage aus und setzt die Berechnung mit dem von ihr zurückgegebenen Wert fort.

Sequenz erstellen in SAP HANA

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.

Häufig gestellte Fragen

Zurückgerollte Transaktionen, beim Neustart verlorene Cache-Blöcke und parallele Sitzungen erzeugen Lücken. Eine Sequenz garantiert Eindeutigkeit, niemals eine ununterbrochene Folge von Werten.

Ja. Eine Sequenz ist unabhängig von jeder Tabelle, sodass mehrere Tabellen darauf zugreifen können. Dies ist nützlich, wenn Kennungen innerhalb eines gesamten Schemas und nicht nur pro Tabelle eindeutig sein müssen.

Ja. Die Analyse des Einfügedurchsatzes zeigt, wie viele Werte ein Knoten zwischen Neustarts verbraucht, wodurch der Geschwindigkeitsgewinn durch Caching gegen die Größe der dadurch entstehenden Lücken abgewogen wird.

Ja. Durch den Vergleich der aktuellen Werte mit MAXVALUE und der Verbrauchsrate lässt sich die Erschöpfung vorhersagen, sodass eine Sequenz erweitert wird, bevor Einfügungen im Produktivbetrieb fehlschlagen.

Da NEXTVAL in der aktuellen Sitzung nicht aufgerufen wurde, meldet CURRVAL den Wert, der dieser Sitzung zugewiesen wurde, und hat daher nichts zu melden, bis ein Wert zugewiesen wurde.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: