Co je sekvence v oracle
- Oracle Sequence je uživatelsky vytvořený objekt, který může sdílet více uživatelů za účelem generování jedinečných celých čísel.
- Nejobecnějším použitím sekvencí by bylo generování sloupce primárního klíče v tabulce.
- Sekvence je generována interní rutinou Oracle, takže se nemusíme starat o . Ušetří to tim3, protože vývojář nemusí generovat rutinu pro vytváření sekvence
- Generátor sekvenčních čísel lze nakonfigurovat tak, aby se zvýšil nebo snížil
- Existuje pouze v datovém slovníku, může být omezený nebo opakovatelný (cyklus).
- K vytvoření sekvence potřebujeme oprávnění vytvořit sekvenci
Vytvoření sekvence se provádí pomocí
VYTVOŘIT SEKVENCI
[ZAČÍT S] [NÁRŮST O] [NO/MINVALUE] [NO/MAXVALUE] [NE/CYKLUS] [NE/CACHE];
|
Popis jednotlivých hodnot
ZAČÍT S | Definuje počáteční hodnotu sekvence (výchozí 1 ), |
ZVÝŠENÍ O | Definuje úroveň zvýšení nebo snížení (výchozí 1 ), |
MINVALUE | Definuje nejnižší hodnotu pro klesající sekvenci |
MAXVALUE | Definuje nejvyšší hodnotu pro rostoucí sekvenci |
CYKLUS | Definuje, zda se sekvence bude opakovat |
CACHE | Definuje blok pořadových čísel uložených v paměti (výchozí 20 ), NOCACHE vynutí aktualizaci datového slovníku pro každé číslo generované sekvencí |
Příklady
vytvořit sekvenci test_tech začít s 1 přírůstkem o 1 maxvalue 10000 cyklus mezipaměť 20;
vytvořit sekvenci test_tech1
začněte s 1 |
Jak používat sekvence
Pro použití sekvence jednoduše použijte pseudo sloupec CURRVAL a NEXTVAL
NEXTVAL pseudo sloupec
Používá se ke generování postupného pořadového čísla zadané sekvence
Pseudosloupec CURRVAL
Obsahuje sekvenci, kterou uživatel právě vygeneroval
SELECT TEST_TECH.NEXTVAL FROM DUAL;
VYBERTE TEST_TECH.CURRVAL FROM DUAL; VYBERTE TEST_TECH.NEXTVAL FROM DUAL; |
Jak upravit sekvence
Můžeme upravit sekvence pomocí alter sekvence.
SQL> ALTER SEQUENCE tech_test1 ZVÝŠENÍ O 50; |
Změny mají vliv pouze na budoucí použití sekvence.
Musíte být vlastníkem nebo mít oprávnění k úpravě této sekvence
Nemůžeme změnit začátek s možností. Pro tuto sekvenci je třeba ji vypustit a znovu vytvořit
Změny sekvencí jsou také ověřeny
Jak zrušit sekvenci
Vypuštění pohledu se provádí pomocí příkazu DROP sekvence.
Drop sequence test_tech ; |
Zobrazení slovníku pro zobrazení sekvenčních dat
detaily sekvence mohou být dotazovány ze slovníku dotazem buď USER_SEQUENCES, ALL_SEQUENCES nebo DBA_SEQUENCES. Existují tři kategorie zhlédnutí
USER_% | Toto zobrazení obsahuje pouze informace o objektech vlastněných uživatelem
Příklad USER_TABLES,USER_TAB_COLS |
ALL-% | Toto zobrazení obsahuje informace o objektech, ke kterým má uživatel v databázi přístup.
Příklad ALL_TABLES,ALL_TAB_COLS |
DBA_% | Toto zobrazení obsahuje informace o všech objektech v systému a jedná se o omezená zobrazení, která jsou přístupná uživateli s rolí DBA
Příklad DBA_TABLES,DBA_TAB_COLS |
DBA_% zobrazení informací o sekvencích | ALL_% zobrazení informací o sekvencích | USER_% zobrazení informací o sekvencích | |
Zobrazit informace o sekvencích informace | dba_sequences | všechny_ sekvence | uživatelské_ sekvence |
Vypsat všechny sekvence vlastněné aktuálním použitím
vyberte název_sekvence z uživatelských_sekvencí;
Vypsání všech sekvencí v databázi:
Vyberte vlastníka, název sekvence z dba_sequences;
Vypsání sekvencí přístupných aktuálnímu uživateli:
vyberte název_sekvence z všech sekvencí
Jak zjistit všechny informace o sekvenci?
vybrat název_sekvence,minimální_hodnota,maximální_hodnota,přírůstek_o,poslední_číslo
Z DBA_SEQUENCES
kde OWNER ='
a sekvence_NAME ='
Jak získat aktuální hodnotu věštecké sekvence bez jejího zvýšení
Sloupec last_number zobrazuje další dostupné pořadové číslo, pokud není zadána žádná mezipaměť
VYBERTE poslední_číslo
FROM user_sequences
WHERE název_sekvence =„ |
Jak extrahovat definici sekvence (příkazy DDL) z databáze Oracle, aniž byste museli procházet hromadou zobrazení slovníku
Syntaxe:
SQL> nastavit long 1000 SQL> nastavit velikost stránky 0select DBMS_METADATA.GET_DDL(‘SEQUENCE’,'
|
Jak nastavit hodnotu LASTVALUE v sekvenci Oracle
ALTER SEQUENCE tech_seq_name INCREMENT BY 250;
SELECT tech_seq_name.nextval FROM dual; ALTER SEQUENCE tech_seq_name INCREMENT BY 1; |
Jak resetovat sekvenci v Oracle
Existuje mnoho způsobů.
a) Můžeme sekvenci vypustit a znovu vytvořit. Tím se ale zneplatní všechny závislé objekty (spouštěče/uložené procedury atd.)
b) Můžeme resetovat pomocí těchto jednoduchých kroků
Krok 1:Najděte nejnovější hodnotu sekvence
Vyberte tech_seq_name.nextval FROM dual; Krok 2:změňte sekvenci s přírůstkem záporné hodnoty poslední hodnoty
ALTER SEQUENCE tech_seq_name INCREMENT BY - Krok 3 Proveďte nextval pro nastavení zpět na nulu SELECT tech_seq_name.nextval FROM dual; Krok 4:Změňte přírůstek zpět na 1 ALTER SEQUENCE tech_seq_name INCREMENT BY 1; Příklad SELECT tech_seq_name.nextval FROM dual; —————————————— 250 ALTER SEQUENCE tech_seq_name INCREMENT BY -250; SELECT tech_seq_name.nextval FROM dual; ALTER SEQUENCE tech_seq_name INCREMENT BY 1; |
Více najdete na tomto odkazu
Jak resetovat sekvenci
Dopad ukládání sekvencí do mezipaměti
Sekvence jsou ukládány do mezipaměti za účelem zlepšení výkonu načítání. V RAC každá instance ukládá hodnoty mezipaměti
Při použití mezipaměti můžeme mít mezery v pořadí z následujících důvodů
- Dojde k vrácení
- Zhroucení systému nebo selhání instance
- Sekvence je použita v jiné tabulce
V Oracle 12c je nová funkce pro sekvence
Sekvence relací
S Oracle Database 12C jsou k dispozici nová klíčová slova SESSION, GLOBAL, která lze zadat během vytváření sekvenceVYTVOŘIT SEKVENCI test_session_seq ZAČÍT S 1 PŘÍRŮSTEK O 1 SEKCI;
VYTVOŘIT SEKVENCI test_global_seq ZAČÍT S 1 PŘÍRŮSTEK O 1 GLOBÁLNÍ;
Globální | Relace |
vytváří standardní sekvenci dobře známou z předchozí verze. Toto je výchozí. | vytváří nový typ sekvence relace, což je speciální typ sekvence, která je speciálně navržena pro použití s globálními dočasnými tabulkami, které mají viditelnost relace. Sekvence relací vrací jedinečný rozsah pořadových čísel pouze v rámci relace, nikoli však napříč relacemi. Dalším rozdílem je, že sekvence relací nejsou trvalé. Pokud relace zmizí, změní se i stav sekvencí relací, ke kterým bylo během relace přistupováno. |