SAP HANA-zelfstudie: Reeks maken

⚡ Slimme samenvatting

Maak een reeks aan in SAP HANA definieert een databaseobject dat automatisch een oplopende lijst met numerieke waarden genereert. Parameters bepalen de startwaarde, de stapgrootte, de limieten, de herhaling en het cachegedrag van de generator.

  • 🔢 Kerndefinitie: Een reeks genereert getallen volgens de regels die in de specificatie zijn vastgelegd, in oplopende of aflopende volgorde.
  • 🔗 Geen tabelbinding: Sequenties zijn onafhankelijke objecten die door de applicatie worden gebruikt en niet aan een tabel zijn gekoppeld.
  • 📍 Twee waarden: CURRVAL geeft de huidige waarde terug en NEXTVAL gaat verder in de reeks en geeft de nieuwe waarde terug.
  • ️ Sleutelparameters: START WITH, INCREMENT BY, MAXVALUE, MINVALUE, CYCLE en CACHE bepalen de vorm van de uitvoer.
  • ♻️ Wielersport: CYCLE start de nummering opnieuw bij de limiet; NO CYCLE is de standaardinstelling en genereert in plaats daarvan een foutmelding.
  • ⚡ caching: CACHE reserveert een blok getallen per knooppunt voor snelheid; NO CACHE is de standaardinstelling.
  • 🔄 Resetoptie: RESET BY voert een subquery uit bij het herstarten van de database en hervat de uitvoering vanaf de waarde die deze retourneert.

Maak een reeks aan in SAP HANA

Wat is volgorde?

Een reeks is een databaseobject dat automatisch de opgehoogde lijst met numerieke waarden genereert volgens de regel zoals gespecificeerd in de reeksspecificatie.

Om bijvoorbeeld het werknemersnummer automatisch in de kolom (EMPLOYEE_NO) van de tabel in te voegen, gebruiken we volgorde wanneer een nieuw record in de tabel wordt ingevoegd.

Reekswaarden worden gegenereerd in oplopende of aflopende volgorde.

Reeksen zijn niet aan tabellen gekoppeld; ze worden gebruikt door de applicatie. Er zijn twee waarden in volgorde –

  • CURRVAL – Geef de huidige waarde van de reeks op.
  • NEXTVAL – Geef de volgende waarde van de reeks op.

SYNTAXIS

CREATE SEQUENCE <sequence_name> [<sequence_parameter_list>] [RESET BY <subquery>]

SYNTAXISCHE ELEMENTEN

ELEMENTS PRODUCTBESCHRIJVING
Het is de naam van de reeks.
[ ] Het specificeert een of meer sequentieparameters.
BEGINNEN MET Het beschrijft de waarde van de startreeks.
VERHOGING DOOR Dit specificeert de waarde die moet worden verhoogd vanaf de laatst toegewezen waarde voor elke keer dat er een nieuwe reekswaarde wordt gegenereerd. De standaardwaarde is 1.
MAXIMUM WAARDE Dit specificeert de maximale waarde die door de reeks kan worden gegenereerd. kan tussen -4611686018427387903 en 4611686018427387902 liggen.
GEEN MAXWAARDE Als NO MAXVALUE is opgegeven, is de maximale waarde voor een oplopende reeks 4611686018427387903 en de minimale waarde voor een aflopende reeks -1.
MINWAARDE / GEEN MINWAARDE Het specificeert de minimale waarde die een reeks kan genereren. kan tussen -4611686018427387904 en 4611686018427387902 liggen. Wanneer NO MINVALUE wordt gebruikt, is de minimumwaarde voor een oplopende reeks 1.
FIETS De CYCLE-richtlijn specificeert dat het volgnummer opnieuw wordt gestart nadat het de maximale of minimale waarde heeft bereikt.
GEEN CYCLUS Standaardoptie. De NO CYCLE-richtlijn geeft aan dat het volgnummer niet opnieuw wordt gestart nadat het de maximale of minimale waarde heeft bereikt.
CACHE De cachegrootte bepaalt welk bereik van volgnummers in een knooppunt wordt opgeslagen. moet een niet-negatief geheel getal zijn.
GEEN CACHE Standaardoptie. De NO CACHE-richtlijn geeft aan dat het volgnummer niet in de cache van een node wordt opgeslagen.
RESETTEN DOOR Het specificeert dat tijdens het opnieuw opstarten van de database, de database automatisch de en de reekswaarde wordt opnieuw gestart met de geretourneerde waarde.

Voorbeeld -

We zullen een reeks maken met de naam DHK_SCHEMA.EMP_NO, die elke keer een verhoogde waarde van de reeks met +1 creëert wanneer de reeks wordt gebruikt.

Sequentiescript –

CREATE SEQUENCE DHK_SCHEMA.EMP_NO START WITH 100 INCREMENT BY 1;

Hier gebruiken we object “volgorde” in het onderstaande voorbeeld om de waarde van werknemer nr. met +1 te verhogen telkens wanneer de selectiequery wordt uitgevoerd. In de zoekopdracht kan de “nextval” worden gebruikt voor het genereren van serienummers of voor hetzelfde type vereiste.

Gebruik van reeks –

SELECT DHK_SCHEMA.EMP_NO.nextval FROM DUMMY;

UITVOER – 100, 101, 102 … enzovoort voor elke uitvoering van de bovenstaande select-query.

Hoe gebruik je een reeks in een tabel?

Het bovenstaande voorbeeld retourneert een getal, maar slaat het nergens op. Drie patronen verbinden een reeks met echte gegevens, en de juiste keuze hangt af van hoeveel controle de applicatie nodig heeft.

1) Roep NEXTVAL rechtstreeks aan in de INSERT. De meest expliciete aanpak. De applicatie bepaalt wanneer een getal verbruikt is.

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) Gebruik de reeks als standaardwaarde voor de kolom. Het nummer wordt toegekend, zelfs als de invoeging de kolom niet vermeldt, wat handig is voor toepassingen die nooit zijn ontworpen om de volgreeks te 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) Lees de zojuist uitgegeven waarde af. CURRVAL retourneert het laatste getal dat deze sessie heeft gebruikt, waarmee een onderliggende rij wordt gekoppeld aan de zojuist ingevoegde bovenliggende rij.

SELECT DHK_SCHEMA.EMP_NO.CURRVAL FROM DUMMY;

⚠️ Waarschuwing: CURRVAL geeft een foutmelding totdat NEXTVAL minstens één keer in de huidige sessie is aangeroepen. Het rapporteert de waarde die aan deze sessie is toegekend, niet het globale maximum, waardoor twee sessies op hetzelfde moment verschillende actuele waarden kunnen hebben.

Volgnummer versus identiteitskolom

SAP HANA biedt ook een identiteitskolom, die getallen genereert zonder een apart object. Beide methoden lossen hetzelfde probleem op, maar op een andere manier.

Parameter Volgorde Identiteitskolom
Object type Onafhankelijk databaseobject Kolomeigenschap van een tabel
Gedeeld over tafels Ja, een willekeurig aantal tabellen kan er gebruik van maken. Nee, het hoort bij één enkele kolom.
Waarde zichtbaar vóór invoeging Ja, via NEXTVAL Nee, gegenereerd tijdens het invoegen.
Definitie MAAK EEN REEKS STANDAARD GEGENEREERD ALS IDENTITEIT
Best voor Gedeelde nummering, invoegingen voor ouder en kind Een eenvoudige surrogaatsleutel op één tabel

Kies een volgnummer wanneer het nummer bekend moet zijn voordat de rij bestaat, of wanneer meerdere tabellen dezelfde nummerreeks delen. Kies een identiteitskolom voor een eenvoudige surrogaatsleutel zonder verdere vereisten.

Sequenties beheren: ALTER, DROP en Gaps

Een sequentie blijft zelden in de oorspronkelijke vorm. Drie onderhoudstaken komen steeds weer terug.

Het gedrag veranderen. Met ALTER SEQUENCE worden de increment, limieten of cyclus van een bestaande sequentie aangepast zonder deze te verwijderen.ping Met RESTART WITH wordt de teller gereset, wat de gebruikelijke stap is na het opnieuw laden van testgegevens.

ALTER SEQUENCE DHK_SCHEMA.EMP_NO RESTART WITH 1000;
ALTER SEQUENCE DHK_SCHEMA.EMP_NO INCREMENT BY 10;
DROP SEQUENCE DHK_SCHEMA.EMP_NO;

Inzicht in de hiaten. Sequentienummers zijn niet gegarandeerd aaneengesloten, en dit verrast mensen die een ononderbroken auditspoor verwachten. Gaten ontstaan ​​om drie redenen:

  • Teruggedraaide transacties. NEXTVAL is niet transactioneel. Een getal dat is gebruikt bij een invoegbewerking die later wordt teruggedraaid, wordt nooit opnieuw uitgegeven.
  • cachen. Met CACHE 100 reserveert een node honderd waarden tegelijk. Bij een herstart wordt alles wat in dat blok ongebruikt blijft, verwijderd.
  • Gelijktijdige sessies. Twee sessies die tegelijkertijd gegevens invoegen, wisselen elkaar af, waardoor geen van beide een ononderbroken reeks ziet.

De praktische regel is om een ​​reeks te beschouwen als een bron van unieke identificatoren, nooit als een teller van het aantal rijen. Wanneer een ononderbroken reeks wettelijk vereist is, zoals bij factuurnummering, moet deze worden gegenereerd door applicatielogica met eigen controlemechanismen, en niet door een reeks in een database.

Ontdekken wat er is. De systeemweergave SEQUENCES toont elke sequentie met de huidige waarde, wat de snelste manier is om een ​​schema te controleren. De bijbehorende syntax wordt behandeld in SAP HANA-SQL en kolomdefinities in SAP HANA-gegevenstypen.

Veelgestelde vragen

Teruggedraaide transacties, cacheblokken die verloren gaan bij een herstart en gelijktijdige sessies creëren allemaal hiaten. Een reeks garandeert uniciteit, nooit een aaneengesloten reeks waarden.

Ja. Een reeks is onafhankelijk van elke tabel, dus meerdere tabellen kunnen er gebruik van maken. Dit is handig wanneer identificatoren uniek moeten zijn binnen een volledig schema in plaats van per tabel.

Ja. Door de invoegdoorvoer te analyseren, wordt duidelijk hoeveel waarden een knooppunt verbruikt tussen herstarts. Dit geeft een afweging tussen de snelheidswinst van caching en de omvang van de hiaten die daardoor ontstaan.

Ja. Door de huidige waarden te vergelijken met MAXVALUE en het verbruikspercentage wordt uitputting voorspeld, waardoor een reeks wordt uitgebreid voordat invoegingen in de productieomgeving mislukken.

Omdat NEXTVAL nog niet is aangeroepen in de huidige sessie, rapporteert CURRVAL de waarde die aan deze sessie is toegekend. CURRVAL heeft dus niets te rapporteren totdat er een waarde is ontvangen.

Vat dit bericht samen met: