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.

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.
