sql >> Database teknologi >  >> RDS >> Oracle

Hvad er Sequence i oracle

Hvad er Sequence i Oracle

  • Oracle Sequence er et brugerskabt objekt, som kan deles af flere brugere for at generere unikke heltal
  • Den mest generelle brug af sekvenser ville være at generere primær nøglekolonne i tabellen.
  • Sekvensen er genereret af oracles interne rutine, så vi behøver ikke bekymre os om . Det vil spare tim3, da udvikleren ikke behøver at generere den sekvensproducerende rutine
  • En sekventiel nummergenerator kan konfigureres til at øge eller mindske
  • Det findes kun i dataordbogen, kan begrænses eller gentages (cyklus).
  • Vi skal oprette sekvensprivilegium for at oprette sekvensen

Oprettelse af en sekvens udføres ved hjælp af

OPRET SEKVENS

[START MED]

[ØG MED]

[NEJ/MINVÆRDI]

[NEJ/MAXVÆRDI]

[NEJ/CYKLUS]

[NEJ/CACHE];

Beskrivelse af hver værdi

 

START MED Det definerer startværdien af ​​sekvensen (standard 1 ),
Forøg med Det definerer stignings- eller reduktionsniveauet (standard 1 ),
MINVÆRDI Det definerer den laveste værdi for en faldende sekvens
MAXVÆRDI Det definerer den højeste værdi for en stigende sekvens
CYKLUS Det definerer, om sekvensen skal gentage sig selv
CACHE Det definerer blokken af ​​sekvensnumre, der opbevares i hukommelsen (standard 20 ), tvinger NOCACHE dataordbogen til at blive opdateret for hvert tal genereret af sekvensen

Eksempler

 

opret sekvens test_tech start med 1
stigning med 1
maxvalue 10000
cyklus
cache 20;

opret sekvens test_tech1

start med 1
stigning med 1
maks. værdi 4500000
cyklus
nocache;

 

Sådan bruger du sekvenser

For at bruge sekvensen skal du blot bruge pseudokolonnen CURRVAL og NEXTVAL

NEXTVAL pseudo-kolonne 

Det bruges til at generere det efterfølgende sekvensnummer for den specificerede sekvens

CURRVAL pseudo-kolonne 

Den indeholder den sekvens, som brugeren lige har genereret

VÆLG TEST_TECH.NEXTVAL FRA DUAL;

VÆLG TEST_TECH.CURRVAL FRA DUAL;

VÆLG TEST_TECH.NEXTVAL FRA DUAL;

Sådan ændres sekvenserne

Vi kan ændre sekvenserne ved at bruge ændre sekvens.

SQL> ALTER SEQUENCE tech_test1 FORØG MED 50;

Ændringerne påvirker kun den fremtidige brug af sekvensen.

Du skal være ejer eller have ændret privilegium på den sekvens

Vi kan ikke ændre start med mulighed. For denne sekvens skal droppes og genskabes

Sekvensændringer valideres også

Sådan dropper du sekvensen

Sletning af en visning udføres ved hjælp af kommandoen DROP-sekvens.

Dropsekvens test_tech ;

Ordbogsvisninger for at se sekvensdataene

sekvensdetaljer kan forespørges fra ordbogen ved at forespørge enten USER_SEQUENCES, ALL_ SEQUENCES eller DBA_ SEQUENCES. Der er tre kategorier af visninger

USER_% Denne visning indeholder kun oplysninger om de objekter, der ejes af brugeren

Eksempel

USER_TABLES,USER_TAB_COLS

ALLE-% Denne visning indeholder information om de objekter, som brugeren har adgang til i databasen.

Eksempel

ALL_TABLES,ALL_TAB_COLS

DBA_% Denne visning indeholder oplysninger om alle objekter   i systemet, og disse er begrænsede visninger, som er tilgængelige for brugeren, der har en DBA-rolle

Eksempel

DBA_TABLES,DBA_TAB_COLS

  DBA_% visninger om sekvensoplysninger ALLE_% visninger om sekvensoplysninger USER_% visninger om sekvensoplysninger
Se om sekvenser information dba_sequences alle_ sekvenser bruger_sekvenser

At liste alle sekvenser, der ejes af den aktuelle brug

vælg sekvensnavn fra brugersekvenser;

Sådan viser du alle sekvenser i en database:

Vælg ejer, sekvensnavn fra dba_sequences;

Sådan viser du sekvenser, der er tilgængelige for den aktuelle bruger:

vælg sekvensnavn fra alle_sekvenser

Hvordan bestemmer man alle oplysninger om sekvensen?

vælg sekvensnavn, min_værdi, maks._værdi, increment_by, last_number
FRA DBA_SEQUENCES

hvor OWNER =''
og sequence_NAME  ='';

Sådan hentes den aktuelle værdi af en orakelsekvens uden at øge den

Kolonnen last_number viser det næste tilgængelige sekvensnummer, hvis der ikke er angivet nogen cache

VÆLG sidste_nummer

FRA user_sequences

WHERE sekvensnavn ='';

Sådan udtrækkes sekvensdefinitionen (DDL-sætninger) fra en Oracle-database uden at skulle gennemgå en stak ordbogsvisninger

Syntaks:

SQL> sæt lang 1000
SQL> sæt sidestørrelse 0 vælg DBMS_METADATA.GET_DDL('SEQUENCE','') fra DUAL;

Sådan indstilles LASTVALUE-værdien i en Oracle-sekvens

ALTER SEQUENCE tech_seq_name FORØG MED 250;

SELECT tech_seq_name.nextval FROM dual;

ALTER SEQUENCE tech_seq_name  ØG MED 1;

Sådan nulstiller du en sekvens i Oracle

Der er mange måder.

a) Vi kan slippe og genskabe sekvensen. Men dette ugyldiggør alle afhængige objekter (triggere/lagrede procedurer osv.)

b) Vi kan nulstille  ved hjælp af disse enkle trin

Trin 1:Find den seneste værdi af sekvensen

Vælg tech_seq_name.nextval FROM dual;

Trin 2:Ændre rækkefølgen med en stigning af den negative værdi af  den seneste værdi

ALTER SEQUENCE tech_seq_name FORØG MED -  minværdi 0;

Trin 3  Udfør Nextval for at sætte det tilbage til nul

SELECT tech_seq_name.nextval FROM dual;

Trin 4:Skift stigning tilbage til 1

ALTER SEQUENCE tech_seq_name  ØG MED 1;

Eksempel

SELECT tech_seq_name.nextval FROM dual;

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

250

ALTER SEQUENCE tech_seq_name FORØG MED -250;

SELECT tech_seq_name.nextval FROM dual;

ALTER SEQUENCE tech_seq_name  ØG MED 1;

Du kan finde mere på dette link

Sådan nulstilles sekvensen

Virkningen af ​​cachelagring af sekvenserne

Sekvenser cachelagres med det formål at forbedre henteydelsen. I RAC gemmer hver instans cacheværdierne

Vi kan have huller i rækkefølge, når vi bruger cache på grund af følgende årsager

  1. Tilbageføring sker
  2. Systemnedbrud eller instansnedbrud
  3. Sekvens bruges i en anden tabel

Der er en ny funktion i Oracle 12c til sekvenser

Sessionssekvenser

Med Oracle Database 12C er nye søgeord SESSION, GLOBAL tilgængelige, der kan specificeres under en sekvensoprettelse
CREATE SEQUENCE test_session_seq START MED 1 FORVÆG MED 1 SESSION;
OPRET SEKVENS test_global_seq START MED 1 INKREMENT GLOBAL;

Global Session
opretter standardsekvens, som er velkendt i tidligere udgivelser. Dette er standarden. opretter ny type sessionssekvens, som er en speciel type sekvens, der er specifikt designet til at blive brugt med globale midlertidige tabeller, der har sessionssynlighed. Sessionssekvens returnerer kun et unikt interval af sekvensnumre inden for en session, men ikke på tværs af sessioner. En anden forskel er, at sessionssekvenser ikke er vedvarende. Hvis en session forsvinder, så forsvinder tilstanden af ​​de sessionssekvenser, der blev tilgået under sessionen.


  1. proxysql-admin Alternativer - ClusterControl ProxySQL GUI

  2. Sådan logger du forespørgsler i PostgreSQL

  3. Brug af indeks, brug af midlertidig, ved hjælp af filersortering - hvordan løser man dette?

  4. 3 måder at "løsne" en streng i MySQL