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 |
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','
|
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 - 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
- Tilbageføring sker
- Systemnedbrud eller instansnedbrud
- 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 sekvensoprettelseCREATE 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. |