SAP Vodič za HANA: Stvaranje niza
⚡ Pametni sažetak
Stvori slijed u SAP HANA definira objekt baze podataka koji automatski generira inkrementirani popis numeričkih vrijednosti. Parametri kontroliraju početnu vrijednost, prirast, ograničenja, cikluse i ponašanje predmemoriranja generatora.

Što je sekvenca?
Niz je objekt baze podataka koji automatski generira inkrementirani popis numeričkih vrijednosti prema pravilu kako je navedeno u specifikaciji niza.
Na primjer, za automatsko umetanje broja zaposlenika u stupac (EMPLOYEE_NO) tablice, kada se novi zapis umetne u tablicu, tada koristimo niz.
Vrijednosti niza generiraju se uzlaznim ili silaznim redoslijedom.
Nizovi nisu povezani s tablicama; koristi ih aplikacija. Postoje dvije vrijednosti u nizu –
- CURRVAL – Navedite trenutnu vrijednost niza.
- NEXTVAL – Navedite sljedeću vrijednost niza.
SINTAKSA
CREATE SEQUENCE <sequence_name> [<sequence_parameter_list>] [RESET BY <subquery>]
ELEMENTI SINTAKSE
| ELEMENTI | OPIS |
|---|---|
| To je naziv niza. | |
| [ ] | Određuje jedan ili više parametara sekvence. |
| POČETI SA | Opisuje vrijednost početne sekvence. |
| POVEĆAJ ZA | Ovo specificira vrijednost koja se povećava od posljednje dodijeljene vrijednosti za svaki put kada se generira nova vrijednost niza. Zadana vrijednost je 1. |
| MAKSIMALNA VRIJEDNOST | Ovo određuje maksimalnu vrijednost koju sekvenca može generirati. može biti između -4611686018427387903 i 4611686018427387902. |
| NIJE MAKSIMALNA VRIJEDNOST | Kada je određen NO MAXVALUE, za uzlazni niz, maksimalna vrijednost bit će 4611686018427387903, a minimalna vrijednost za silazni niz bit će -1. |
| MIN VRIJEDNOST / BEZ MINIMALNE VRIJEDNOSTI | Određuje minimalnu vrijednost koju niz može generirati. može biti između -4611686018427387904 i 4611686018427387902. Kada se koristi NO MINVALUE, minimalna vrijednost za uzlazni niz je 1 |
| CIKLUS | Direktiva CYCLE određuje da će se slijedni broj ponovno pokrenuti nakon što dostigne svoju maksimalnu ili minimalnu vrijednost. |
| NEMA CIKLUSA | Zadana opcija. Direktiva NO CYCLE određuje da se slijedni broj neće ponovno pokrenuti nakon što dosegne svoju maksimalnu ili minimalnu vrijednost. |
| PREDMOŠĆE | Veličina predmemorije određuje koji će se raspon slijednih brojeva predmemorirati u čvoru. mora biti neoznačeni cijeli broj. |
| NEMA KEAŠA | Zadana opcija. Direktiva NO CACHE određuje da se slijedni broj neće predmemorirati u čvoru. |
| RESETIRATI DO | Određuje da tijekom ponovnog pokretanja baze podataka, baza podataka automatski izvršava a vrijednost niza se ponovno pokreće s vraćenom vrijednošću. |
Primjer -
Stvorit ćemo sekvencu pod nazivom DHK_SCHEMA.EMP_NO, koja će kreirati inkrementiranu vrijednost sekvence za +1 svaki put kada se sekvenca koristi.
Sekvenca skripte –
CREATE SEQUENCE DHK_SCHEMA.EMP_NO START WITH 100 INCREMENT BY 1;
Ovdje ćemo koristiti “sekvencu” objekta u donjem primjeru za povećanje vrijednosti broja zaposlenika za +1 svaki put kada se izvrši upit za odabir. U upitu se "nextval" može koristiti za generiranje serijskog broja ili iste vrste zahtjeva.
Upotreba sekvence –
SELECT DHK_SCHEMA.EMP_NO.nextval FROM DUMMY;
IZLAZ – 100, 101, 102 … i tako dalje za svako izvršavanje gornjeg upita za odabir.
Kako koristiti niz u tablici
Gornji primjer vraća broj, ali ga nigdje ne pohranjuje. Tri obrasca povezuju niz sa stvarnim podacima, a pravi izbor ovisi o tome koliko kontrole aplikacija treba.
1) Pozovite NEXTVAL direktno u INSERT-u. Najeksplicitniji pristup. Aplikacija odlučuje kada se broj konzumira.
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) Koristite niz kao zadanu vrijednost stupca. Broj se dodjeljuje čak i kada umetak ne spominje stupac, što odgovara aplikacijama koje nikada nisu napisane da bi znale taj slijed.
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) Pročitajte upravo izdanu vrijednost. CURRVAL vraća zadnji broj koji je ova sesija uzela, a to je način na koji je podređeni redak povezan s upravo umetnutim roditeljskim redom.
SELECT DHK_SCHEMA.EMP_NO.CURRVAL FROM DUMMY;
⚠️ Upozorenje: CURRVAL ne uspijeva s greškom sve dok se NEXTVAL ne pozove barem jednom u trenutnoj sesiji. Izvještava o vrijednosti izdanoj ovoj sesiji, a ne o globalnom maksimumu, tako da dvije sesije mogu sadržavati različite trenutne vrijednosti u istom trenutku.
Slijed u odnosu na stupac identiteta
SAP HANA također nudi stupac identiteta koji generira brojeve bez zasebnog objekta. Ta dva rješavaju isti problem na različite načine.
| Parametar | Slijed | Stupac identiteta |
|---|---|---|
| Vrsta objekta | Neovisni objekt baze podataka | Svojstvo stupca jedne tablice |
| Dijeljeno među tablicama | Da, bilo koji broj tablica može koristiti tu uslugu | Ne, pripada jednom stupcu |
| Vrijednost vidljiva prije umetanja | Da, putem NEXTVAL-a | Ne, generirano tijekom umetanja |
| Definicija | STVORI SLJED | GENERIRANO PO ZADANIM PODACIMA KAO IDENTITET |
| Najbolje za | Zajedničko numeriranje, umeci roditelja i djeteta | Jednostavan surogat ključ na jednom stolu |
Odaberite niz kada broj mora biti poznat prije nego što redak postoji ili kada nekoliko tablica dijeli jedan niz numeriranja. Odaberite stupac identiteta za običan surogatni ključ bez širih zahtjeva.
Upravljanje nizovima: ALTER, DROP i praznine
Slijed rijetko ostaje onakav kakav je prvobitno stvoren. Tri zadatka održavanja se ponavljaju.
Promjena ponašanja. ALTER SEQUENCE podešava prirast, ograničenja ili cikliranje postojećeg slijeda bez ispuštanjaping RESTART WITH resetira brojač, što je uobičajeni korak nakon ponovnog učitavanja testnih podataka.
ALTER SEQUENCE DHK_SCHEMA.EMP_NO RESTART WITH 1000; ALTER SEQUENCE DHK_SCHEMA.EMP_NO INCREMENT BY 10; DROP SEQUENCE DHK_SCHEMA.EMP_NO;
Razumijevanje praznina. Nije zajamčeno da će slijedni brojevi biti susjedni, što iznenađuje ljude koji očekuju neprekinuti revizijski trag. Praznine se pojavljuju iz tri razloga:
- Vraćene transakcije. NEXTVAL nije transakcijski. Broj koji potroši umetnuti element koji se kasnije vraća unatrag nikada se ne izdaje ponovno.
- Predmemoriranje. S CACHE 100 čvor rezervira stotinu vrijednosti odjednom. Ponovno pokretanje odbacuje sve što ostane neiskorišteno u tom bloku.
- Istodobne sesije. Dvije sesije koje se istovremeno ubacuju isprepliću svoje brojeve, tako da nijedna ne vidi kontinuirano izvođenje.
Praktično pravilo je tretirati niz kao izvor jedinstvenih identifikatora, nikada kao brojač koliko redaka postoji. Tamo gdje je neprekinuti niz zakonski zahtjev, poput numeriranja računa, mora ga generirati logika aplikacije s vlastitim kontrolama, a ne niz iz baze podataka.
Pronalaženje onoga što postoji. Sistemski prikaz SEQUENCES navodi svaki niz s njegovom trenutnom vrijednošću, što je najbrži način za reviziju sheme. Povezana sintaksa je obrađena u SAP HANA SQL i definicije stupaca u SAP HANA tipovi podataka.
