|
![]() | Triggery | ![]() | Jazyk SQL a jeho implementace | Kurzory v SQL | ![]() |
Sekvence je objektem aplikace sloužícím ke generování posloupnosti celočíselných hodnot (v rozsahu 64 bitů), zejména unikátních klíčů.
Sekvence není svázána s žádnou konkrétní tabulkou, takže se dá použít k vytváření klíčů, které budou unikátní nejen v rámci tabulky, ale i v rámci skupiny tabulek.
Sekvence se dají vytvářet, modifikovat a rušit buď z vývojového prostředí 602SQL nebo pomocí SQL příkazů CREATE SEQUENCE, ALTER SEQUENCE a DROP SEQUENCE. Sekvence jsou v rámci aplikace označeny svým jménem. Popis syntaxe sekvence naleznete zde.
V definici sekvence lze stanovit minimální a maximální hodnotu a krok, s nimž se hodnoty generují. Je-li krok záporný, čísla se generují sestupně. Dále lze stanovit počáteční hodnotu sekvence a příznak, že se po dosažení limitní hodnoty má generování cyklicky opakovat. Je-li krajní hodnota dosažena a není-li nastaven příznak cyklického opakování, pak při generování další hodnoty nastane chybový sqlstate W0219 (SEQUENCE_EXHAUSTED).
Pokud klient alokuje novou hodnotu ze sekvence a poté odvolá transakci, alokovaná hodnota se do sekvence nevrací a nebude tedy využita.
V globální systémové proměnné @@IDENTITY lze nalézt poslední hodnotu, kterou klient získat z některé sekvence nebo z generátoru unikátních klíčů v tabulce (implicitní hodnota UNIQUE).
Na hodnoty generované pomocí sekvence se v SQL příkazech odkazuje pomocí výrazů:
jméno_sekvence.CURRVAL
jméno_sekvence.NEXTVAL
NEXTVAL označuje novou hodnotu v sekvenci, CURRVAL označuje hodnotu naposled vrácenou pomocí NEXTVAL. Volání CURRVAL se nesmí použít před NEXTVAL, jinak v opačném případě nastane chybový sqlstate W0220 (NO_CURRENT_VAL).
Každý klient si udržuje vlastní hodnotu CURRVAL, různí klienti mají tedy v jednom okamžiku různé hodnoty CURRVAL.
Na hodnoty generované pomocí sekvence se v SQL příkazech odkazuje pomocí výrazu:
NEXT VALUE FOR jméno_sekvence
Pokud se tento výraz vyhodnotí vícekrát v rámci jednoho elementárního příkazu (např. jednoho příkazu INSERT), vrátí opakovaně stejnou hodnotu. V příkazech iterujících po záznamech (UPDATE, INSERT ... SELECT) vracejí stejnou hodnotu všechna volání týkající se zpracování jednoho záznamu.
Z klientského programu lze novou hodnotu generovanou v sekvenci SEQ získat do globální celočíselné proměnné VAL příkazem:
SET :>val=SEQ.NEXTVAL
Sekvenci lze alternativně vytvořit či modifikovat pomocí interaktivního návrháře přístupného z Řídicího panelu vývojového prostředí 602SQL.
V okně Output vývojového prostředí 602SQL lze pomocí záložky Zdroj zobrazit popis zvolené sekvence. V komentáři před touto definicí je příští hodnota, která bude ze sekvence získána. Pokud je pro sekvenci definována vyrovnávací paměť, pak to nemusí být hodnota, kterou vrátí příští volání NEXTVAL, protože některé dosud nepoužité hodnoty mohou být ve vyrovnávací paměti.
Při exportu aplikace s daty je součástí definice sekvence příští hodnota, při exportu bez dat nikoliv (příští hodnota bude rovna počáteční hodnotě).
Odlišnosti od normy
Seznam subsekcí:
![]() | Triggery | ![]() | Jazyk SQL a jeho implementace | Kurzory v SQL | ![]() |