SAP HANA-veiledning: Lag sekvens
⚡ Smart oppsummering
Opprett sekvens i SAP HANA definerer et databaseobjekt som genererer en inkrementert liste med numeriske verdier automatisk. Parametere styrer startverdi, inkrement, grenser, sykling og hurtiglagringsoppførsel for generatoren.

Hva er sekvens?
En sekvens er et databaseobjekt som automatisk genererer den inkrementerte listen over numeriske verdier i henhold til regelen som spesifisert i sekvensspesifikasjonen.
For eksempel for å sette inn ansattnummer automatisk i kolonne (EMPLOYEE_NO) i Tabell, når en ny post settes inn i tabellen, bruker vi sekvens.
Sekvensverdier genereres i stigende eller synkende rekkefølge.
Sekvenser er ikke knyttet til tabeller; de brukes av applikasjonen. Det er to verdier i rekkefølge –
- CURRVAL – Angi gjeldende verdi for sekvens.
- NEXTVAL – Angi neste verdi av sekvensen.
SYNTAKS
CREATE SEQUENCE <sequence_name> [<sequence_parameter_list>] [RESET BY <subquery>]
SYNTAKSEELEMENTER
| ELEMENTS | BESKRIVELSE |
|---|---|
| Det er navnet på sekvensen. | |
| [ ] | Den spesifiserer en eller flere sekvensparametere. |
| START MED | Den beskriver startsekvensverdien. |
| ØK MED | Dette spesifiserer verdien som skal økes fra den siste verdien som ble tildelt for hver gang en ny sekvensverdi genereres. Standard er 1. |
| MAXVALUE | Dette spesifiserer maksimalverdien som kan genereres av sekvensen. kan være mellom -4611686018427387903 og 4611686018427387902. |
| IKKE MAKSVERDI | Når NO MAXVALUE er spesifisert, vil maksimumsverdien for en stigende sekvens være 4611686018427387903 og minimumsverdien for en synkende sekvens vil være -1. |
| MINVERDI / INGEN MINVERDI | Den spesifiserer minimumsverdien som en sekvens kan generere. kan være mellom -4611686018427387904 og 4611686018427387902. Når INGEN MINVALUE brukes, er minimumsverdien for en stigende sekvens 1 |
| SYKLUS | CYCLE-direktivet spesifiserer at sekvensnummeret startes på nytt etter at det når sin maksimums- eller minimumsverdi. |
| INGEN SYKLUS | Standardalternativ. NO CYCLE-direktivet spesifiserer at sekvensnummeret ikke skal startes på nytt etter at det når sin maksimums- eller minimumsverdi. |
| CACHE | Hurtigbufferstørrelsen angir hvilket område med sekvensnumre som skal mellomlagres i en node. må være et usignert heltall. |
| INGEN CACHE | Standardalternativ. NO CACHE-direktivet spesifiserer at sekvensnummeret ikke skal mellomlagres i en node. |
| TILBAKESTILL AV | Den spesifiserer at under omstart av databasen, kjører databasen automatisk og sekvensverdien startes på nytt med den returnerte verdien. |
Eksempel -
Vi vil lage en sekvens med navnet DHK_SCHEMA.EMP_NO, som vil skape økt verdi av sekvensen med +1 hver gang når sekvensen brukes.
Sekvensskript –
CREATE SEQUENCE DHK_SCHEMA.EMP_NO START WITH 100 INCREMENT BY 1;
Her vil vi bruke objektet "sekvens" i eksemplet nedenfor for å øke verdien av ansattnr med +1 hver gang valgspørringen utføres. I spørringen kan "nextval" brukes til serienummergenerering eller samme type krav.
Bruk av sekvens –
SELECT DHK_SCHEMA.EMP_NO.nextval FROM DUMMY;
OUTPUT – 100, 101, 102 … og så videre for hver utførelse av utvalgsspørringen ovenfor.
Slik bruker du en sekvens i en tabell
Eksemplet ovenfor returnerer et tall, men lagrer det ikke noe sted. Tre mønstre kobler en sekvens til reelle data, og det riktige valget avhenger av hvor mye kontroll applikasjonen trenger.
1) Kall NEXTVAL direkte i INSERT-en. Den mest eksplisitte tilnærmingen. Applikasjonen bestemmer når et tall forbrukes.
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) Bruk sekvensen som standard kolonne. Nummeret tildeles selv når innlegget ikke nevner kolonnen, noe som passer for applikasjoner som aldri ble skrevet for å vite om sekvensen.
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) Les av verdien som nettopp ble utstedt. CURRRVAL returnerer det siste tallet denne økten tok, som er hvordan en underrad kobles til den overordnede raden som nettopp ble satt inn.
SELECT DHK_SCHEMA.EMP_NO.CURRVAL FROM DUMMY;
⚠️ Advarsel: CURRVAL feiler med en feil inntil NEXTVAL har blitt kalt minst én gang i gjeldende økt. Den rapporterer verdien som er gitt til denne økten, ikke det globale maksimumet, slik at to økter kan ha forskjellige gjeldende verdier samtidig.
Sekvens vs. identitetskolonne
SAP HANA tilbyr også en identitetskolonne, som genererer tall uten et separat objekt. De to løser det samme problemet på forskjellige måter.
| Parameter | Sequence | Identitetskolonne |
|---|---|---|
| Objekttype | Uavhengig databaseobjekt | Kolonneegenskapen til én tabell |
| Delt på tvers av tabeller | Ja, et hvilket som helst antall tabeller kan trekke fra det | Nei, den tilhører én enkelt kolonne |
| Verdi synlig før innsetting | Ja, gjennom NEXTVAL | Nei, generert under innsettingen |
| Definisjon | OPPRETT SEKVENS | GENERERT SOM STANDARD SOM IDENTITET |
| Best for | Delt nummerering, foreldre- og barneinnlegg | En enkel surrogatnøkkel på ett bord |
Velg en sekvens når nummeret må være kjent før raden finnes, eller når flere tabeller deler én nummereringsserie. Velg en identitetskolonne for en vanlig surrogatnøkkel uten et bredere krav.
Administrere sekvenser: ALTER, DROP og Gaps
En sekvens forblir sjelden slik den først ble opprettet. Tre vedlikeholdsoppgaver dukker opp gjentatte ganger.
Å endre oppførselen. ENDRE SEKVENS justerer økningen, grensene eller syklingen til en eksisterende sekvens uten å slippe den.ping START PÅ NYTT nullstiller telleren, som er det vanlige trinnet etter en innlasting av testdata.
ALTER SEQUENCE DHK_SCHEMA.EMP_NO RESTART WITH 1000; ALTER SEQUENCE DHK_SCHEMA.EMP_NO INCREMENT BY 10; DROP SEQUENCE DHK_SCHEMA.EMP_NO;
Forståelse av hull. Sekvensnumre er ikke garantert sammenhengende, og dette overrasker folk som forventer et ubrutt revisjonsspor. Manglende resultater oppstår av tre grunner:
- Tilbakeførte transaksjoner. NEXTVAL er ikke transaksjonelt. Et tall som brukes av et innsettingsnummer som senere rulles tilbake, blir aldri utstedt på nytt.
- Buffer. Med CACHE 100 reserverer en node hundre verdier samtidig. En omstart forkaster det som ikke brukes i den blokken.
- Samtidige økter. To økter som setter inn samtidig fletter sammen tallene sine, slik at ingen av dem ser en kontinuerlig kjøring.
Den praktiske regelen er å behandle en sekvens som en kilde til unike identifikatorer, aldri som en teller for hvor mange rader som finnes. Der en ubrutt serie er et lovkrav, for eksempel fakturanummerering, må den genereres av applikasjonslogikk med egne kontroller i stedet for av en databasesekvens.
Å finne det som finnes. Systemvisningen SEKVENSER viser hver sekvens med gjeldende verdi, som er den raskeste måten å revidere et skjema på. Relatert syntaks er dekket i SAP HANA SQL og kolonnedefinisjoner i SAP HANA-datatyper.
