SAP HANA-opetusohjelma: Luo sekvenssi

⚡ Älykäs yhteenveto

Luo sarja kohdassa SAP HANA määrittelee tietokantaobjektin, joka luo automaattisesti kasvatettavan luettelon numeerisista arvoista. Parametrit ohjaavat generaattorin aloitusarvoa, kasvua, rajoja, sykliä ja välimuistitoimintoja.

  • 🔢 Ydinmääritelmä: Sarja generoi numeroita sen määrittelyssä asetetun säännön mukaisesti nousevassa tai laskevassa järjestyksessä.
  • 🔗 Ei taulukon sidontaa: Sekvenssit ovat sovelluksen käyttämiä itsenäisiä objekteja, jotka eivät ole liitetty mihinkään taulukkoon.
  • 📍 Kaksi arvoa: CURRVAL palauttaa nykyisen arvon ja NEXTVAL siirtää sekvenssiä eteenpäin ja palauttaa uuden arvon.
  • 🎚️ Tärkeimmät parametrit: START WITH, INCREMENT BY, MAXVALUE, MINVALUE, CYCLE ja CACHE muokkaavat tulostetta.
  • ♻️ Pyöräily: CYCLE aloittaa numeroinnin uudelleen rajasta; oletusarvo on NO CYCLE ja aiheuttaa sen sijaan virheen.
  • Caching: CACHE varaa nopeuden takaamiseksi tietyn numerolohkon solmua kohden; oletusarvo on EI VÄLIPALAA.
  • 🔄 Nollausvaihtoehto: RESET BY suorittaa alikyselyn tietokannan uudelleenkäynnistyksen yhteydessä ja jatkaa palauttamastaan ​​arvosta.

Luo sekvenssi kohdassa SAP HANA

Mikä on sekvenssi?

Sekvenssi on tietokantaobjekti, joka luo automaattisesti lisätyn luettelon numeroarvoista sekvenssimäärityksessä määritellyn säännön mukaisesti.

Jos esimerkiksi lisätään työntekijän numero automaattisesti taulukon sarakkeeseen (EMPLOYEE_NO), kun taulukkoon lisätään uusi tietue, käytämme järjestystä.

Sekvenssiarvot luodaan nousevassa tai laskevassa järjestyksessä.

Sekvenssejä ei liitetä taulukoihin; sovellus käyttää niitä. On kaksi arvoa peräkkäin -

  • CURRVAL – Anna sekvenssin nykyinen arvo.
  • NEXTVAL – Anna sekvenssin seuraava arvo.

SYNTAKSI

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

SYNTAKSIELEMENTIT

OSAT KUVAUS
Se on sekvenssin nimi.
[ ] Se määrittää yhden tai useamman sekvenssiparametrin.
ALOITA Se kuvaa aloitussekvenssin arvon.
LISÄYS Tämä määrittää arvon, jota lisätään viimeisestä arvosta joka kerta, kun uusi sekvenssiarvo luodaan. Oletusarvo on 1.
MAXVALUE Tämä määrittää sekvenssin generoiman maksimiarvon. voi olla välillä -4611686018427387903 ja 4611686018427387902.
EI MAKSIMIARVOA Kun NO MAXVALUE -arvoksi on määritetty nouseva arvo, maksimiarvo on 4611686018427387903 ja laskevan arvo on -1.
MINARVO / EI MINARVOA Se määrittää pienimmän arvon, jonka sekvenssi voi tuottaa. voi olla välillä -4611686018427387904 ja 4611686018427387902. Kun käytetään NO MINVALUE -arvoa, nousevan sekvenssin pienin arvo on 1.
SYKLI CYCLE-direktiivi määrittää, että järjestysnumero aloitetaan alusta sen jälkeen, kun se saavuttaa maksimi- tai minimiarvonsa.
EI PYYKLIÄ Oletusasetus. NO CYCLE -direktiivi määrittää, että järjestysnumeroa ei aloiteta uudelleen sen saavuttamisen jälkeen, kun se on saavuttanut maksimi- tai minimiarvonsa.
VÄLIPALA Välimuistin koko määrittää, mikä sarjanumeroalue tallennetaan solmun välimuistiin. on oltava etumerkitön kokonaisluku.
EI VÄLImuistia Oletusasetus. NO CACHE-direktiivin mukaan järjestysnumeroa ei tallenneta välimuistiin solmussa.
NOLLAA Se määrittää, että tietokannan uudelleenkäynnistyksen aikana tietokanta suorittaa automaattisesti ja sekvenssin arvo aloitetaan uudelleen palautetulla arvolla.

Esimerkki -

Luomme sekvenssin, jonka nimi on DHK_SCHEMA.EMP_NO, joka lisää sarjan arvoa +1:llä joka kerta, kun sekvenssiä käytetään.

Sekvenssiskripti –

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

Tässä käytämme objektia "sekvenssi" alla olevassa esimerkissä kasvattaaksemme työntekijän no:n arvoa +1:llä joka kerta, kun valintakysely suoritetaan. Kyselyssä "nextval" voidaan käyttää sarjanumeron luomiseen tai samantyyppiseen vaatimukseen.

Sekvenssin käyttö –

SELECT DHK_SCHEMA.EMP_NO.nextval FROM DUMMY;

TULOSTA – 100, 101, 102 … ja niin edelleen jokaisella yllä olevan valintakyselyn suorituskerralla.

Sekvenssin käyttäminen taulukossa

Yllä oleva esimerkki palauttaa luvun, mutta ei tallenna sitä mihinkään. Kolme mallia yhdistää sekvenssin reaalidataan, ja oikea valinta riippuu siitä, kuinka paljon ohjausta sovellus tarvitsee.

1) Kutsu NEXTVAL-funktiota suoraan INSERT-funktiossa. Selkein lähestymistapa. Sovellus päättää, milloin numero kulutetaan.

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) Käytä sekvenssiä sarakkeen oletusarvona. Numero annetaan, vaikka lisäys ei mainitsisi saraketta, mikä sopii sovelluksille, joita ei koskaan kirjoitettu tietämään sekvenssiä.

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) Lue juuri annettu arvo. CURRVAL palauttaa tässä istunnossa viimeksi otetun luvun, joka osoittaa, miten alikategoria linkitetään juuri lisättyyn pääriviin.

SELECT DHK_SCHEMA.EMP_NO.CURRVAL FROM DUMMY;

⚠️ Varoitus: CURRVAL epäonnistuu virheeseen, kunnes NEXTVAL-funktiota on kutsuttu vähintään kerran nykyisessä istunnossa. Se raportoi tälle istunnolle annetun arvon, ei globaalia maksimiarvoa, joten kahdessa istunnossa voi olla eri nykyiset arvot samaan aikaan.

Sekvenssi vs. identiteetti-sarake

SAP HANA tarjoaa myös identiteettisarakkeen, joka luo numeroita ilman erillistä objektia. Nämä kaksi ratkaisevat saman ongelman eri tavoin.

Parametri Järjestys Identiteettisarake
Kohteen tyyppi Itsenäinen tietokantaobjekti Yhden taulukon sarakeominaisuus
Jaettu pöytien kesken Kyllä, siitä voi piirtää mikä tahansa määrä pöytiä Ei, se kuuluu yhteen sarakkeeseen
Arvo näkyvissä ennen lisäystä Kyllä, NEXTVALin kautta Ei, syntyy lisäyksen aikana
Määritelmä LUO SEKVENSSI LUODETTU OLETUSASETUKSEN MUKAAN IDENTITEETIKSI
Parasta Jaettu numerointi, ylä- ja alaosan lisäykset Yksinkertainen sijaisavain yhdellä pöydällä

Valitse sarja, kun numero on tiedettävä ennen rivin luomista tai kun useat taulukot jakavat saman numerosarjan. Valitse identiteettisarake tavalliselle sijaisavaimelle, jolla ei ole laajempaa vaatimusta.

Sekvenssien hallinta: ALTER, DROP ja aukot

Sarja pysyy harvoin alkuperäisessä muodossaan. Kolme ylläpitotehtävää tulee toistuvasti esiin.

Käyttäytymisen muuttaminen. ALTER SEQUENCE säätää olemassa olevan sekvenssin lisäystä, rajoja tai sykliä ilman pudotustaping RESTART WITH nollaa laskurin, mikä on tavanomainen vaihe testidatan uudelleenlatauksen jälkeen.

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

Aukkoaukkojen ymmärtäminen. Järjestysnumeroiden ei taata olevan yhtenäisiä, ja tämä yllättää ihmisiä, jotka odottavat katkeamatonta lokitietoa. Aukkoja esiintyy kolmesta syystä:

  • Peruutetut tapahtumat. NEXTVAL ei ole transaktionaalinen. Myöhemmin perutun lisäyksen käyttämää numeroa ei koskaan myönnetä uudelleen.
  • Välimuisti. CACHE 100:n avulla solmu varaa sata arvoa kerrallaan. Uudelleenkäynnistys hylkää kaikki käyttämättömät arvot kyseisessä lohkossa.
  • Samanaikaiset istunnot. Kaksi samanaikaisesti lisäävää istuntoa lomittavat numeronsa, joten kumpikaan ei näe jatkuvaa suoritusta.

Käytännön sääntö on käsitellä sarjaa yksilöllisten tunnisteiden lähteenä, ei koskaan rivien lukumäärän laskurina. Jos katkeamaton sarja on lakisääteinen vaatimus, kuten laskujen numerointi, se on luotava sovelluslogiikalla omilla ohjaimillaan eikä tietokantasarjan avulla.

Löytää sitä, mikä on olemassa. Järjestelmänäkymä SEQUENCES listaa jokaisen sekvenssin ja sen nykyisen arvon, mikä on nopein tapa tarkastaa skeema. Aiheeseen liittyvää syntaksia käsitellään kohdassa SAP HANA SQL ja sarakemääritelmät SAP HANA-tietotyypit.

UKK

Peruutetut tapahtumat, uudelleenkäynnistyksen yhteydessä kadonneet välimuistilohkot ja samanaikaiset istunnot luovat kaikki aukkoja. Sarja takaa ainutlaatuisuuden, ei koskaan jatkuvaa arvojen jonon.

Kyllä. Sekvenssi on riippumaton mistään taulukosta, joten useat taulukot voivat käyttää sitä. Tästä on hyötyä silloin, kun tunnisteiden on oltava yksilöllisiä koko skeemassa taulukkokohtaisen sijaan.

Kyllä. Lisäysten läpimenon analysointi näyttää, kuinka monta arvoa solmu kuluttaa uudelleenkäynnistysten välillä, mikä tasapainottaa välimuistin nopeushyödyn sen luomien aukkojen koon kanssa.

Kyllä. Nykyisten arvojen vertaaminen MAXVALUE-arvoon ja kulutusnopeuteen ennustaa loppumista, joten sarjaa laajennetaan ennen kuin insertit alkavat epäonnistua tuotannossa.

Koska NEXTVAL-funktiota ei ole kutsuttu nykyisessä istunnossa, CURRVAL raportoi tälle istunnolle annetun arvon, joten sillä ei ole mitään raportoitavaa ennen kuin sellainen on otettu.

Tiivistä tämä viesti seuraavasti: