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.

  • 🔢 Kjernedefinisjon: En sekvens genererer tall i henhold til regelen som er satt i spesifikasjonen, stigende eller synkende.
  • 🔗 Ingen tabellinnbinding: Sekvenser er uavhengige objekter som brukes av applikasjonen i stedet for å være knyttet til en tabell.
  • 📍 To verdier: CURRRVAL returnerer gjeldende verdi og NEXTVAL flytter sekvensen fremover og returnerer den nye.
  • 🎚️ Nøkkelparametere: START WITH, INCREMENT BY, MAXVALUE, MINVALUE, CYCLE og CACHE former utdataene.
  • ♻️ Sykling: SYKLUS starter nummereringen på nytt ved grensen; INGEN SYKLUS er standard og genererer en feil i stedet.
  • caching: CACHE reserverer en blokk med tall per node for hastighet; NO CACHE er standardinnstillingen.
  • 🔄 Tilbakestillingsalternativ: RESET BY kjører en delspørring ved omstart av databasen og fortsetter fra verdien den returnerer.

Opprett sekvens i SAP HANNA

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.

Spørsmål og svar

Tilbakeførte transaksjoner, hurtigbufrede blokker som går tapt ved omstart og samtidige økter skaper alle hull. En sekvens garanterer unikhet, aldri en kontinuerlig løp av verdier.

Ja. En sekvens er uavhengig av en hvilken som helst tabell, så flere tabeller kan trekke fra den. Dette er nyttig når identifikatorer må være unike på tvers av et helt skjema i stedet for per tabell.

Ja. Analyse av innsettingsgjennomstrømning viser hvor mange verdier en node bruker mellom omstarter, noe som balanserer hastighetsøkningen ved mellomlagring mot størrelsen på hullene den oppretter.

Ja. Å sammenligne gjeldende verdier med MAXVALUE og forbruksrate forutsier utmattelse, så en sekvens utvides før innsatsene begynner å svikte i produksjonen.

Fordi NEXTVAL ikke har blitt kalt i den gjeldende økten. CURRVAL rapporterer verdien som er gitt til denne økten, så den har ingenting å rapportere før en er tatt.

Oppsummer dette innlegget med: