SAP Výukový program HANA: Vytvořte sekvenci
⚡ Chytré shrnutí
Vytvořit sekvenci v SAP HANA definuje databázový objekt, který automaticky generuje inkrementovaný seznam číselných hodnot. Parametry řídí počáteční hodnotu, inkrementaci, limity, cyklování a chování generátoru při ukládání do mezipaměti.

Co je sekvence?
Sekvence je databázový objekt, který automaticky generuje inkrementovaný seznam číselných hodnot podle pravidla specifikovaného ve specifikaci sekvence.
Například pro automatické vložení čísla zaměstnance do sloupce (EMPLOYEE_NO) tabulky, když je do tabulky vložen nový záznam, pak použijeme sekvenci.
Sekvenční hodnoty jsou generovány ve vzestupném nebo sestupném pořadí.
Sekvence nejsou spojeny s tabulkami; jsou používány aplikací. Existují dvě hodnoty za sebou –
- CURRVAL – Zadejte aktuální hodnotu sekvence.
- NEXTVAL – Zadejte další hodnotu sekvence.
SYNTAX
CREATE SEQUENCE <sequence_name> [<sequence_parameter_list>] [RESET BY <subquery>]
PRVKY SYNTAXE
| PRVKY | POPIS |
|---|---|
| Je to název sekvence. | |
| [ ] | Určuje jeden nebo více parametrů sekvence. |
| ZAČÍT S | Popisuje hodnotu počáteční sekvence. |
| PŘÍRŮST O | Toto specifikuje hodnotu, která se má zvýšit od poslední přiřazené hodnoty pokaždé, když je vygenerována nová sekvenční hodnota. Výchozí hodnota je 1. |
| MAX | Toto určuje maximální hodnotu, kterou může sekvence vygenerovat. může být mezi -4611686018427387903 a 4611686018427387902. |
| ŽÁDNÁ MAXIMÁLNÍ HODNOTA | Pokud je zadána hodnota NO MAXVALUE, bude pro vzestupnou posloupnost maximální hodnota 4611686018427387903 a minimální hodnota pro sestupnou posloupnost bude -1. |
| MIN / ŽÁDNÁ MINIMÁLNÍ HODNOTA | Určuje minimální hodnotu, kterou může sekvence vygenerovat. může být mezi -4611686018427387904 a 4611686018427387902. Pokud se použije NO MINVALUE, minimální hodnota pro vzestupnou posloupnost je 1. |
| CYKLUS | Direktiva CYCLE určuje, že pořadové číslo bude restartováno po dosažení maximální nebo minimální hodnoty. |
| ŽÁDNÝ CYKLUS | Výchozí možnost. Direktiva NO CYCLE určuje, že pořadové číslo nebude restartováno po dosažení maximální nebo minimální hodnoty. |
| MEZIPAMĚŤ | Velikost mezipaměti určuje, který rozsah pořadových čísel bude v uzlu uložen do mezipaměti. musí být celé číslo bez znaménka. |
| ŽÁDNÁ CACHE | Výchozí možnost. Direktiva NO CACHE určuje, že pořadové číslo nebude v uzlu ukládáno do mezipaměti. |
| RESET BY | Určuje, že během restartu databáze databáze automaticky provede a hodnota sekvence je restartována s vrácenou hodnotou. |
Příklad -
Vytvoříme sekvenci s názvem DHK_SCHEMA.EMP_NO, která vytvoří navýšenou hodnotu sekvence o +1 pokaždé, když je sekvence použita.
Sekvenční skript –
CREATE SEQUENCE DHK_SCHEMA.EMP_NO START WITH 100 INCREMENT BY 1;
Zde použijeme objekt „sekvence“ v níže uvedeném příkladu ke zvýšení hodnoty zaměstnance no o +1 pokaždé, když se provede výběrový dotaz. V dotazu lze „nextval“ použít pro generování sériového čísla nebo stejného typu požadavku.
Použití sekvence –
SELECT DHK_SCHEMA.EMP_NO.nextval FROM DUMMY;
VÝSTUP – 100, 101, 102 … a tak dále pro každé provedení výše uvedeného výběrového dotazu.
Jak používat sekvenci v tabulce
Výše uvedený příklad vrací číslo, ale nikam ho neukládá. Tři vzory propojují sekvenci se skutečnými daty a správná volba závisí na tom, kolik kontroly aplikace potřebuje.
1) Zavolejte NEXTVAL přímo v INSERT. Nejexplicitnější přístup. Aplikace rozhoduje, kdy je číslo spotřebováno.
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) Použijte sekvenci jako výchozí sloupec. Číslo je přiřazeno i v případě, že vložený text neuvádí daný sloupec, což vyhovuje aplikacím, které nebyly nikdy napsány tak, aby o dané sekvenci věděly.
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) Přečtěte si právě vydanou hodnotu. Funkce CURRVAL vrací poslední číslo, které tato relace nabyla, což je způsob, jakým je podřízený řádek propojen s právě vloženým nadřazeným řádkem.
SELECT DHK_SCHEMA.EMP_NO.CURRVAL FROM DUMMY;
Warning️ Varování: Funkce CURRVAL selže s chybou, dokud není funkce NEXTVAL v aktuální relaci volána alespoň jednou. Funkce hlásí hodnotu vydanou pro tuto relaci, nikoli globální maximum, takže dvě relace mohou ve stejném okamžiku obsahovat různé aktuální hodnoty.
Sekvence vs. sloupec identity
SAP HANA také nabízí sloupec identity, který generuje čísla bez samostatného objektu. Oba řeší stejný problém odlišně.
| Parametr | Sekvence | Sloupec identity |
|---|---|---|
| Typ objektu | Nezávislý databázový objekt | Vlastnost sloupce jedné tabulky |
| Sdíleno mezi tabulkami | Ano, může z něj čerpat libovolný počet tabulek. | Ne, patří to do jednoho sloupce. |
| Hodnota viditelná před vložením | Ano, prostřednictvím NEXTVAL | Ne, generováno během vkládání |
| Definice | VYTVOŘIT POŘADÍ | VYGENEROVÁNO VE VÝCHOZÍM NASTAVENÍ JAKO IDENTITA |
| Nejlepší pro | Sdílené číslování, nadřazené a podřízené vkládání | Jednoduchý náhradní klíč na jednom stole |
Vyberte posloupnost, pokud musí být číslo známo před existencí řádku, nebo pokud několik tabulek sdílí jednu číslovací řadu. Vyberte sloupec identity pro prostý náhradní klíč bez širších požadavků.
Správa sekvencí: ALTER, DROP a mezery
Sekvence málokdy zůstane taková, jaká byla původně vytvořena. Opakovaně se objevují tři úlohy údržby.
Změna chování. ALTER SEQUENCE upravuje přírůstek, limity nebo cyklování existující sekvence bez propadu.ping RESTART WITH vynuluje počítadlo, což je obvyklý krok po opětovném načtení testovacích dat.
ALTER SEQUENCE DHK_SCHEMA.EMP_NO RESTART WITH 1000; ALTER SEQUENCE DHK_SCHEMA.EMP_NO INCREMENT BY 10; DROP SEQUENCE DHK_SCHEMA.EMP_NO;
Pochopení mezer. Není zaručeno, že pořadová čísla budou souvislá, což překvapuje lidi, kteří očekávají nepřerušenou auditní stopu. Mezery se objevují ze tří důvodů:
- Vrácené transakce. Funkce NEXTVAL není transakční. Číslo spotřebované vloženým procesem, který je později vrácen zpět, se nikdy znovu nevydá.
- Ukládání do mezipaměti. S CACHE 100 si uzel rezervuje sto hodnot najednou. Restart zahodí vše, co v daném bloku zůstane nepoužité.
- Souběžné sezení. Dvě relace vkládající se současně prokládají svá čísla, takže ani jedna z nich nevidí nepřetržitý běh.
Praktickým pravidlem je zacházet s posloupností jako se zdrojem jedinečných identifikátorů, nikdy ne jako s čítačem počtu existujících řádků. Pokud je nepřerušená posloupnost zákonným požadavkem, například u číslování faktur, musí být generována aplikační logikou s vlastními ovládacími prvky, nikoli databázovou posloupností.
Hledání toho, co existuje. Systémový pohled SEQUENCES uvádí každou sekvenci s její aktuální hodnotou, což je nejrychlejší způsob auditu schématu. Související syntaxe je popsána v SAP HANA SQL a definice sloupců v SAP Datové typy HANA.
