Firebird 12.díl, Generátory

Napsal O webu (») 25. 1. 2008 v kategorii Databáze, přečteno: 3694×
Tento článek je psán za podpory webhostingu banan.cz, který Firebird plně podporuje.

Generátory

Někdy je v databázových systémech možné definovat zvláštní typ číselných sloupců, které automaticky při vkládání nového řádku do tabulky přiřazují hodnoty v podobě vzestupných čísel (autoinkrement). Tento typ čísel je vhodné definovat především pro definici primárního klíče tabulek. Autoinkremet ve Firebirdu sice přímo nenajdeme, ale Firebird nabízí možnost aplikace obecného mechanizmu pro generování sekvencí jedinečných čísel pomocí tzv. generátorů.


Základem tohoto mechanizmu je generátor - objekt určitého názvu uložený v databázi - který uchovává doposud nejvyšší použitou číselnou hodnotu sekvence (hodnotu generátoru). Tato hodnota je ve Firebirdu definována jako celé číslo typu INT64. K manipulaci s generátory slouží funkce GEN_ID () a příkaz SQL SET GENERATOR. Funkce GEN ID () zvýší/sníží hodnotu specifikovaného generátoru o hodnotu specifikovanou jako parametr a tuto novou hodnotu zároveň vrátí jako výsledek. SQL dotaz SET GENERATOR slouží pro nastavení generátoru na novou hodnotu. Provedení změny hodnoty generátoru (ať už SQL dotazem nebo funkcí) je jedna z mála operací prováděných mimo transakční kontrolu Firebirdu. To má za náhled, že se při zrušení dotazu neobnoví původní hodnota generátoru. Proto nelze generátory použít jako funkce pro vytváření souvislých sekvencí čísel. Na druhou stranu je tvorba generátorů velmi nenáročná a rychlá.

Vytvoření generátoru

Hodnota nově vytvořeného generátoru je vždy nastavena na 0. Pokud požadujeme počáteční hodnotu generátoru jinou, je nutné ji nastavit příkazem SET GENERATOR. V rámci jedné databáze může být vytvořen libovolný počet generátorů s jedinečnými názvy. Následující příklad ilustruje vtvoření generátoru.


CREATE GENERATOR gen1; //výchozí hodnota je 0
SET GENERATOR gen1 TO 1 // nastavení hodnoty generátoru na 1

Generování čísel pomocí generátoru

Ke generování čísel z generátoru je určena funkce GEN_ID s následující syntaxí:


GEN_ID (nazev_generatoru, inkrement)



Kde nazev_generatoru je identifikací generátoru s určitou aktuální hodnotou a inkrement je celé číslo, o které je aktuální hodnota změněna před vrácením výsledné hodnoty. Inkrement může být větší než 1 a může být také záporný. Volání této s nulovým parametrem vrátí aktuální hodnotu generátoru bez jeho změny. Velice časté použití generátoru je při vytváření hodnot položek při vkládání nových řádků.


CREATE TABLE tab1 (col1 INT);
CREATE GENERATOR gen1;
INSERT INTO tab1 (COL1, COL2) VALUES (GEN_ID (gen1,1), 'BANAN')



Další z mnoha možností využití generátorů je využití spouští prováděných před vložením řádku do tabulky. Tím lze dosáhnou podobného efektu, jako u autoinkrementu.

Změna hodnoty generátoru

Aktuální hodnotu generátoru lze přednastavit příkazem SET GENERATOR s následující syntaxí:


SET GENERATOR nazev TO int;

Zrušení generátoru

Systém Firebird má pro zrušení generátoru příkaz DROP, který má následující syntaxi:


DROP GENERATOR nazev;



Pokud je generátor použit pro definici uložené procedury, spoustě nebo pohledu je nutné před jeho nutné nejprve zrušit všechny související odkazy na tento generátor. Jinak je při pokusu o jeho zrušení ohlášena chyba a celá operace je zrušena.


Autor: Robert Habrman
Štítky: Firebird
Facebook Twitter Topčlánky.cz Linkuj.cz

Komentáře

Zobrazit: standardní | od aktivních | poslední příspěvky | všechno
Článek ještě nebyl okomentován.


Nový komentář

Téma:
Jméno:
Notif. e-mail *:
Komentář:
  [b] [obr]
Odpovězte prosím číslicemi: Součet čísel tři a třináct