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.

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.
