602SQL-Úplná dokumentace Index  

Sekvence (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.

Vlastnosti sekvencí

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).

Získání hodnoty ze sekvence - způsob kompatibilní s Oracle

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.

Získání hodnoty ze sekvence - způsob kompatibilní se standardem SQL 2003

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ískání hodnoty ze sekvence do klientské proměnné

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

Sekvence v Klientském vývojovém prostředí

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í: