sql >> Databasteknik >  >> RDS >> Oracle

Vad är Sequence i oracle

Vad är Sequence i oracle

  • Oracle Sequence är ett användarskapat objekt som kan delas av flera användare för att generera unika heltal
  • Den mest allmänna användningen av sekvenser är att generera primärnyckelkolumn i tabellen.
  • Sekvensen genereras av Oracle intern rutin så vi behöver inte oroa oss för . Det kommer att spara tim3 eftersom utvecklaren inte behöver generera rutinen för sekvensproducerande
  • En serienummergenerator kan konfigureras för att öka eller minska
  • Det finns bara i dataordboken, kan begränsas eller repeteras (cykel).
  • Vi behöver skapa sekvensbehörighet för att skapa sekvensen

Skapa en sekvens görs med hjälp av

SKAPA SEKVENS

[BÖRJA MED]

[ÖKA MED]

[NEJ/MINVÄRDE]

[NEJ/MAXVÄRDE]

[NEJ/CYKEL]

[NEJ/CACHE];

Beskrivning av varje värde

 

BÖRJA MED Det definierar startvärdet för sekvensen (standard 1 ),
ÖKRA MED Det definierar öknings- eller minskningsnivån (standard 1 ),
MINVÄRDE Det definierar det lägsta värdet för en minskande sekvens
MAXVÄRDE Det definierar det högsta värdet för en ökande sekvens
CYKLA Det definierar om sekvensen ska upprepa sig
CACHE Det definierar blocket med sekvensnummer som finns i minnet (standard 20 ), tvingar NOCACHE dataordboken att uppdateras för varje nummer som genereras av sekvensen

Exempel

 

skapa sekvens test_tech start med 1
ökning med 1
maxvärde 10000
cykel
cache 20;

skapa sekvens test_tech1

börja med 1
ökning med 1
maxvärde 4500000
cykel
nocache;

 

Hur man använder sekvenser

För att använda sekvensen, använd helt enkelt pseudokolumnerna CURRVAL och NEXTVAL

NEXTVAL pseudokolumn 

Det används för att generera det successiva sekvensnumret för den specificerade sekvensen

CURRVAL pseudokolumn 

Den innehåller sekvensen som användaren just genererade

VÄLJ TEST_TECH.NEXTVAL FRÅN DUAL;

VÄLJ TEST_TECH.CURRVAL FRÅN DUAL;

VÄLJ TEST_TECH.NEXTVAL FRÅN DUAL;

Hur man ändrar sekvenserna

Vi kan modifiera sekvenserna genom att använda ändra sekvens.

SQL> ALTER SEQUENCE tech_test1 ÖKAR MED 50;

Ändringarna påverkar endast den framtida användningen av sekvensen.

Du måste vara ägare eller ha ändringsbehörighet för den sekvensen

Vi kan inte ändra start med alternativ. För att den här sekvensen måste släppas och återskapas

Sekvensändringar valideras också

Hur man släpper sekvensen

Att släppa en vy görs med DROP-sekvenskommandot.

Släppsekvens test_tech ;

Ordbokvyer för att se sekvensdata

sekvensdetaljer kan efterfrågas från ordboken genom att fråga antingen USER_SEQUENCES, ALL_SEQUENCES eller DBA_SEQUENCES. Det finns tre kategorier av vyer

USER_% Denna vy innehåller endast information om de objekt som ägs av användaren

Exempel

USER_TABLES,USER_TAB_COLS

ALLA-% Denna vy innehåller information om de objekt som användaren kan komma åt i databasen.

Exempel

ALL_TABLES,ALL_TAB_COLS

DBA_% Denna vy innehåller information om alla objekt   i systemet och dessa är begränsade vyer som är tillgängliga för användaren som har en DBA-roll

Exempel

DBA_TABLES,DBA_TAB_COLS

  DBA_% visningar om sekvensinformation ALLA_% visningar om sekvensinformation USER_% visningar om sekvensinformation
Visa om sekvenser information dba_sequences alla_ sekvenser användarsekvenser

För att lista alla sekvenser som ägs av den aktuella användningen

välj sekvensnamn från user_sequences;

För att lista alla sekvenser i en databas:

Välj ägare, sekvensnamn från dba_sequences;

För att lista sekvenser som är tillgängliga för den aktuella användaren:

välj sekvensnamn från alla_sekvenser

Hur tar man reda på all information om sekvensen?

välj sekvensnamn, min_värde, max_värde, inkrement_efter, sista_nummer
FRÅN DBA_SEKVENS

där OWNER =''
och sequence_NAME  ='';

Hur man hämtar det aktuella värdet för en orakelsekvens utan att öka det

Kolumnen last_number visar nästa tillgängliga sekvensnummer om ingen cache anges

VÄLJ sista_nummer

FROM user_sequences

WHERE sekvensnamn ='';

Hur man extraherar sekvensdefinitionen (DDL-satser) från en Oracle-databas utan att behöva gå igenom en hög med ordboksvyer

Syntax:

SQL> set long 1000
SQL> set sidstorlek 0välj DBMS_METADATA.GET_DDL(‘SEQUENCE’,'’) från DUAL;

Hur man ställer in LASTVALUE-värdet i en Oracle-sekvens

ALTER SEQUENCE tech_seq_name ÖKAR MED 250;

SELECT tech_seq_name.nextval FROM dual;

ALTER SEQUENCE tech_seq_name  ÖKA MED 1;

Hur man återställer en sekvens i Oracle

Det finns många sätt.

a) Vi kan släppa och återskapa sekvensen. Men detta ogiltigförklarar alla beroende objekt (utlösare/lagrade procedurer etc.)

b) Vi kan återställa  med dessa enkla steg

Steg 1:Hitta det senaste värdet för sekvensen

Välj tech_seq_name.nextval FROM dual;

Steg 2:Ändra sekvensen med en ökning av det negativa värdet för  det senaste värdet

ALTER SEQUENCE tech_seq_name ÖKA MED -  minvärde 0;

Steg 3  Gör nästa val för att ställa tillbaka den till noll

SELECT tech_seq_name.nextval FROM dual;

Steg 4:Ändra tillbaka inkrement till 1

ALTER SEQUENCE tech_seq_name  ÖKA MED 1;

Exempel

SELECT tech_seq_name.nextval FROM dual;

——————————————

250

ALTER SEQUENCE tech_seq_name ÖKAR MED -250;

SELECT tech_seq_name.nextval FROM dual;

ALTER SEQUENCE tech_seq_name  ÖKA MED 1;

Du kan hitta mer på denna länk

Hur man återställer sekvensen

Konsekvensen av att cachelagra sekvenserna

Sekvensen cachelagras med syftet att förbättra hämtningsprestandan. I RAC lagrar varje instans cache-värdena

Vi kan ha luckor i sekvensen när vi använder cache på grund av följande skäl

  1. Återställning sker
  2. Systemkrasch eller instanskrasch
  3. Sekvens används i en annan tabell

Det finns en ny funktion i Oracle 12c för sekvenser

Sessionssekvenser

Med Oracle Database 12C är nya nyckelord SESSION, GLOBAL tillgängliga som kan specificeras under en sekvensskapande
CREATE SEQUENCE test_session_seq STARTA MED 1 ÖKNING MED 1 SESSION;
SKAPA SEKVENS test_global_seq STARTA MED 1 ÖKNING GLOBAL;

Global Session
skapar standardsekvens som är välkänd i tidigare versioner. Detta är standard. skapar ny typ av sessionssekvens, vilket är en speciell typ av sekvens som är speciellt utformad för att användas med globala temporära tabeller som har sessionssynlighet. Sessionssekvens returnerar ett unikt intervall av sekvensnummer endast inom en session, men inte över sessioner. En annan skillnad är att sessionssekvenserna inte är ihållande. Om en session försvinner, försvinner även tillståndet för sessionssekvenserna som användes under sessionen.


  1. Konvertera BufferedInputStream till bild

  2. Hur man jämför datetime med endast datum i SQL Server

  3. Automatisk datainsamling om slutförda uppgifter i MS SQL Server

  4. T-SQL XOR-operatör