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 |
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’,'
|
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 - 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
- Återställning sker
- Systemkrasch eller instanskrasch
- 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 sekvensskapandeCREATE 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. |