SAP Tutorial HANA: Creați secvență

⚡ Rezumat inteligent

Creați secvența în SAP HANA definește un obiect de bază de date care generează automat o listă incrementată de valori numerice. Parametrii controlează valoarea inițială, incrementarea, limitele, ciclurile și comportamentul de memorare în cache al generatorului.

  • 🔢 Definiția de bază: O secvență generează numere conform regulii stabilite în specificația sa, crescătoare sau descrescătoare.
  • 🔗 Fără legare la tabel: Secvențele sunt obiecte independente utilizate de aplicație, nu atașate vreunui tabel.
  • 📍 Două valori: CURRVAL returnează valoarea curentă, iar NEXTVAL avansează secvența și returnează cea nouă.
  • 🎚️ Parametrii cheie: START WITH, INCREMENT BY, MAXVALUE, MINVALUE, CYCLE și CACHE modelează ieșirea.
  • ♻️ Ciclism: CYCLE repornește numerotarea la limită; NO CYCLE este valoarea implicită și generează în schimb o eroare.
  • Memorarea în cache: CACHE rezervă un bloc de numere per nod pentru viteză; NO CACHE este opțiunea implicită.
  • 🔄 Opțiune de resetare: RESET BY execută o subinterogare la repornirea bazei de date și o reia de la valoarea pe care o returnează.

Creați secvența în SAP HANA

Ce este Sequence?

O secvență este un obiect de bază de date care generează automat lista incrementată de valori numerice conform regulii specificate în specificația secvenței.

De exemplu, pentru a introduce automat numărul angajatului în coloana (EMPLOYEE_NO) din Tabel, atunci când o înregistrare nouă este inserată în tabel, atunci folosim secvența.

Valorile secvenței sunt generate în ordine crescătoare sau descrescătoare.

Secvențele nu sunt asociate cu tabele; sunt utilizate de aplicație. Există două valori în succesiune -

  • CURRVAL – Furnizează valoarea curentă a secvenței.
  • NEXTVAL – Furnizează următoarea valoare a secvenței.

SINTAXĂ

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

ELEMENTE DE SINTAXĂ

ELEMENTE DESCRIERE
Este numele secvenței.
[ ] Specifică unul sau mai mulți parametri de secvență.
ÎNCEPE CU Descrie valoarea secvenței de pornire.
INCREMENTARE CU Aceasta specifică valoarea care urmează să fie incrementată de la ultima valoare atribuită pentru fiecare dată când este generată o nouă valoare a secvenței. Valoarea implicită este 1.
MAXVALUE Aceasta specifică valoarea maximă care poate fi generată de secvență. poate fi între -4611686018427387903 și 4611686018427387902.
NU MAXVALUE Când este specificat NO MAXVALUE, pentru o secvență ascendentă, valoarea maximă va fi 4611686018427387903, iar valoarea minimă pentru o secvență descendentă va fi -1.
MINVALUE / FĂRĂ VALOARE MINĂ Specifică valoarea minimă pe care o poate genera o secvență. poate fi între -4611686018427387904 și 4611686018427387902. Când se utilizează NO MINVALUE, valoarea minimă pentru o secvență ascendentă este 1.
CICLU Directiva CYCLE specifică faptul că numărul de secvență va fi repornit după ce atinge valoarea sa maximă sau minimă.
FĂRĂ CICLU Opțiune implicită. Directiva NO CYCLE specifică faptul că numărul de secvență nu va fi repornit după ce atinge valoarea maximă sau minimă.
CACHE Dimensiunea memoriei cache specifică ce interval de numere de secvență va fi memorat în cache într-un nod. trebuie să fie un număr întreg fără semn.
FĂRĂ CACHE Opțiune implicită. Directiva NO CACHE specifică faptul că numărul de secvență nu va fi memorat în cache într-un nod.
RESETARE PENTRU Specifică că în timpul repornirii bazei de date, baza de date execută automat iar valoarea secvenței este repornită cu valoarea returnată.

Exemplu -

Vom crea o secvență denumită DHK_SCHEMA.EMP_NO, care va crea o valoare incrementată a secvenței cu +1 de fiecare dată când este utilizată secvența.

Scriptul secvenței -

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

Aici vom folosi obiectul „secvență” din exemplul de mai jos pentru a crește valoarea angajatului nr cu +1 de fiecare dată când este executată interogarea de selectare. În interogare, „nextval” poate fi folosit pentru generarea numărului de serie sau același tip de cerință.

Utilizarea secvenței -

SELECT DHK_SCHEMA.EMP_NO.nextval FROM DUMMY;

IEȘIRE – 100, 101, 102 … și așa mai departe pentru fiecare execuție a interogării de selecție de mai sus.

Cum se utilizează o secvență într-un tabel

Exemplul de mai sus returnează un număr, dar nu îl stochează nicăieri. Trei modele conectează o secvență la date reale, iar alegerea corectă depinde de cât de mult control are nevoie aplicația.

1) Apelați NEXTVAL direct în INSERT. Cea mai explicită abordare. Aplicația decide când este consumat un număr.

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) Folosiți secvența ca implicită pentru o coloană. Numărul este atribuit chiar și atunci când inserția nu menționează coloana, ceea ce se potrivește aplicațiilor care nu au fost niciodată scrise pentru a cunoaște secvența.

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) Citiți valoarea tocmai emisă. CURRVAL returnează ultimul număr luat de această sesiune, acesta fiind modul în care un rând copil este legat de părintele tocmai inserat.

SELECT DHK_SCHEMA.EMP_NO.CURRVAL FROM DUMMY;

⚠️ Atenție: Funcția CURRVAL eșuează și afișează o eroare până când funcția NEXTVAL nu a fost apelată cel puțin o dată în sesiunea curentă. Funcția raportează valoarea emisă acestei sesiuni, nu maximul global, astfel încât două sesiuni pot conține valori curente diferite în același timp.

Coloană Secvență vs. Identitate

SAP HANA oferă și o coloană de identitate, care generează numere fără un obiect separat. Cele două rezolvă aceeași problemă în mod diferit.

Parametru Secvenţă Coloana de identitate
Tipul obiectului Obiect independent al bazei de date Proprietatea coloanei unui tabel
Partajat între tabele Da, orice număr de tabele pot extrage informații din acesta Nu, aparține unei singure coloane
Valoare vizibilă înainte de inserare Da, prin NEXTVAL Nu, generat în timpul inserării
Definiție CREAȚI SECVENȚA GENERAT ÎN MOD IMPLICIT CA IDENTITATE
Cel mai bun pentru Numerotare partajată, inserții părinte și copil O cheie surogat simplă pe o masă

Alegeți o secvență atunci când numărul trebuie cunoscut înainte ca rândul să existe sau când mai multe tabele au în comun aceeași serie de numerotare. Alegeți o coloană de identitate pentru o cheie surogat simplă, fără cerințe mai ample.

Gestionarea secvențelor: ALTER, DROP și lacune

O secvență rareori rămâne așa cum a fost creată inițial. Trei sarcini de întreținere apar în mod repetat.

Schimbarea comportamentului. ALTER SEQUENCE ajustează incrementarea, limitele sau ciclurile unei secvențe existente fără a o elimina.ping RESTART WITH resetează contorul, acesta fiind pasul obișnuit după o reîncărcare a datelor de test.

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

Înțelegerea lacunelor. Nu este garantată contiguitatea numerelor de secvență, iar acest lucru îi surprinde pe cei care se așteaptă la o pistă de audit neîntreruptă. Lacunele apar din trei motive:

  • Tranzacții anulate. NEXTVAL nu este tranzacțional. Un număr consumat de o inserție care este ulterior anulată nu este niciodată reemis.
  • Memorarea în cache. Cu CACHE 100, un nod rezervă o sută de valori simultan. O repornire elimină tot ce rămâne neutilizat în acel bloc.
  • Sesiuni simultane. Două sesiuni care inserează simultan numerele lor intercalează, astfel încât niciuna nu are o rulare continuă.

Regula practică este de a trata o secvență ca o sursă de identificatori unici, niciodată ca un contor al numărului de rânduri existente. În cazul în care o serie neîntreruptă este o cerință legală, cum ar fi numerotarea facturilor, aceasta trebuie generată de logica aplicației cu propriile controale, mai degrabă decât de o secvență a bazei de date.

Găsirea a ceea ce există. Vizualizarea sistemului SECVENȚE listează fiecare secvență cu valoarea sa curentă, aceasta fiind cea mai rapidă modalitate de a audita o schemă. Sintaxa aferentă este prezentată în SAP HANA SQL și definiții de coloane în SAP Tipuri de date HANA.

Întrebări frecvente

Tranzacțiile anulate, blocurile din cache pierdute la repornire și sesiunile simultane creează lacune. O secvență garantează unicitatea, niciodată o serie continuă de valori.

Da. O secvență este independentă de orice tabel, deci mai multe tabele pot extrage informații din ea. Acest lucru este util atunci când identificatorii trebuie să fie unici într-o întreagă schemă, mai degrabă decât per tabel.

Da. Analizarea debitului inserțiilor arată câte valori consumă un nod între reporniri, ceea ce echilibrează câștigul de viteză al memorării în cache cu dimensiunea golurilor pe care le creează.

Da. Compararea valorilor actuale cu MAXVALUE și rata de consum prezice epuizarea, așadar o secvență este lărgită înainte ca inserțiile să înceapă să se defecteze în producție.

Deoarece NEXTVAL nu a fost apelată în sesiunea curentă, CURRVAL raportează valoarea emisă acestei sesiuni, deci nu are nimic de raportat până când nu este preluată una.

Rezumați această postare cu: