sql >> Databáze >  >> RDS >> Oracle

Co je sekvence v oracle

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
přírůstkem o 1
maximální hodnota 4500000
cyklus
nocache;

 

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’,'’) z DUAL;

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 -  minvalue 0;

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ů

  1. Dojde k vrácení
  2. Zhroucení systému nebo selhání instance
  3. 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í sekvence
VYTVOŘ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.


  1. Jak se připojit k MySQL pomocí Node.js

  2. Další důvod, proč se vyhnout sp_updatestats

  3. Jak funguje funkce CHAR() na serveru SQL Server (T-SQL)

  4. Jak vložit pole do jednoho MySQL připraveného příkazu s PHP a PDO