Wat is een reeks in orakel
- Oracle Sequence is een door de gebruiker gemaakt object dat door meerdere gebruikers kan worden gedeeld om unieke gehele getallen te genereren
- Het meest algemene gebruik van reeksen zou zijn om een primaire sleutelkolom in de tabel te genereren.
- De reeks wordt gegenereerd door de interne routine van orakel, dus we hoeven ons geen zorgen te maken over . Het zal tim3 besparen omdat de ontwikkelaar de routine voor het produceren van sequenties niet hoeft te genereren
- Een sequentiële nummergenerator, kan worden geconfigureerd om te verhogen of te verlagen
- Het bestaat alleen in de datadictionary, kan beperkt of herhaalbaar zijn (cyclus).
- We hebben het recht om een reeks te maken nodig om de reeks te maken
Een reeks maken doe je met de
REEKS MAKEN
[BEGIN MET] [VERHOGING MET] [GEEN/MINWAARDE] [NEE/MAX.WAARDE] [NEE/CYCLUS] [NO/CACHE];
|
Beschrijving van elke waarde
BEGIN MET | Het definieert de beginwaarde van de reeks (standaard 1 ), |
VERHOGING MET | Het definieert het niveau van verhogen of verlagen (standaard 1 ), |
MINWAARDE | Het definieert de laagste waarde voor een afnemende reeks |
MAXWAARDE | Het definieert de hoogste waarde voor een toenemende reeks |
CYCLUS | Het bepaalt of de reeks zichzelf zal herhalen |
CACHE | Het definieert het blok volgnummers dat in het geheugen wordt bewaard (standaard 20 ), dwingt NOCACHE de datadictionary te updaten voor elk nummer dat door de reeks wordt gegenereerd |
Voorbeelden
maak reeks test_tech start met 1 verhoging met 1 maxvalue 10000 cyclus cache 20;
maak reeks test_tech1
begin met 1 |
Hoe sequenties te gebruiken
Om de reeks te gebruiken, gebruikt u gewoon de CURRVAL en NEXTVAL pseudo-kolommen
NEXTVAL pseudokolom
Het wordt gebruikt om het opeenvolgende volgnummer van de gespecificeerde reeks te genereren
CURRVAL pseudokolom
Het bevat de reeks die de gebruiker zojuist heeft gegenereerd
SELECTEER TEST_TECH.VOLGENDE UIT DUAL;
SELECTEER TEST_TECH.CURRVAL VAN DUAL; SELECTEER TEST_TECH.NEXTVAL VAN DUAL; |
De reeksen wijzigen
We kunnen de reeksen wijzigen met behulp van de reeks wijzigen.
SQL> WIJZIG VOLGORDE tech_test1 VERHOGING MET 50; |
De wijzigingen hebben alleen invloed op het toekomstige gebruik van de reeks.
U moet de eigenaar zijn of wijzigingsrechten hebben voor die reeks
We kunnen de start met optie niet wijzigen. Deze reeks moet worden verwijderd en opnieuw gemaakt
Volgordewijzigingen worden ook gevalideerd
Hoe de reeks te laten vallen
Het neerzetten van een weergave wordt gedaan met behulp van het DROP-volgordecommando.
Dropvolgorde test_tech ; |
Woordenboekweergaven voor het bekijken van de sequentiegegevens
sequentiedetails kunnen vanuit het woordenboek worden opgevraagd door USER_SEQUENCES, ALL_ SEQUENCES of DBA_ SEQUENCES op te vragen. Er zijn drie categorieën weergaven
USER_% | Deze weergave bevat alleen informatie over de objecten die eigendom zijn van de gebruiker
Voorbeeld USER_TABLES,USER_TAB_COLS |
ALL-% | Deze weergave bevat informatie over de objecten waartoe de gebruiker toegang heeft in de database.
Voorbeeld ALL_TABLES,ALL_TAB_COLS |
DBA_% | Deze weergave bevat informatie over alle objecten in het systeem en dit zijn beperkte weergaven die toegankelijk zijn voor de gebruiker met de DBA-rol
Voorbeeld DBA_TABLES,DBA_TAB_COLS |
DBA_% weergaven over reeksinformatie | ALL_% weergaven over reeksinformatie | USER_% weergaven over reeksinformatie | |
Bekijk over reeksen informatie | dba_sequences | alle_ reeksen | gebruikersreeksen |
Om alle sequenties weer te geven die eigendom zijn van het huidige gebruik
selecteer reeksnaam uit gebruikersreeksen;
Om alle sequenties in een database weer te geven:
Selecteer eigenaar, sequence_name uit dba_sequences;
Om sequenties weer te geven die toegankelijk zijn voor de huidige gebruiker:
selecteer sequence_name uit alle_sequences
Hoe bepaal je alle informatie over de reeks?
selecteer sequence_name,min_value,max_value,increment_by,last_number
VAN DBA_SEQUENCES
waarbij OWNER ='
en sequence_NAME ='
Hoe de huidige waarde van een orakelreeks op te halen zonder deze te verhogen
De kolom last_number geeft het volgende beschikbare volgnummer weer als er geen cache is opgegeven
SELECT last_number
FROM user_sequences
WHERE sequence_name =‘ |
Hoe de sequentiedefinitie (DDL-instructies) uit een Oracle-database te extraheren zonder een stapel woordenboekweergaven te hoeven doorlopen
Syntaxis:
SQL> set long 1000 SQL> set pagesize 0select DBMS_METADATA.GET_DDL(‘SEQUENCE’,'
|
Hoe u de LASTVALUE-waarde instelt in een Oracle-reeks
WIJZIG VOLGORDE tech_seq_name VERHOGING MET 250;
SELECT tech_seq_name.nextval FROM dual; ALTER SEQUENCE tech_seq_name VERHOGING MET 1; |
Een reeks resetten in Oracle
Er zijn veel manieren.
a) We kunnen de reeks laten vallen en opnieuw maken. Maar dit maakt alle afhankelijke objecten ongeldig (triggers/opgeslagen procedures enz.)
b) We kunnen resetten door deze eenvoudige stappen
Stap 1:Zoek de laatste waarde van de reeks
Selecteer tech_seq_name.nextval FROM dual; Stap 2:wijzig de volgorde met verhoging van de negatieve waarde van de laatste waarde
ALTER SEQUENCE tech_seq_name INCREMENT BY - Stap 3 Voer nextval uit om het weer op nul te zetten SELECT tech_seq_name.nextval FROM dual; Stap 4:Verander de stapgrootte terug naar 1 ALTER SEQUENCE tech_seq_name VERHOGING MET 1; Voorbeeld SELECT tech_seq_name.nextval FROM dual; ————————————— 250 ALTER SEQUENCE tech_seq_name VERHOGING MET -250; SELECT tech_seq_name.nextval FROM dual; ALTER SEQUENCE tech_seq_name VERHOGING MET 1; |
U kunt meer vinden op deze link
De volgorde resetten
Impact van het cachen van de sequenties
Sequenties worden in de cache opgeslagen met als doel de ophaalprestaties te verbeteren. In RAC slaat elke instantie de cachewaarden op
We kunnen hiaten in de volgorde hebben bij het gebruik van cache vanwege de volgende redenen
- Terugdraaien vindt plaats
- Systeemcrash of instantiecrash
- De volgorde wordt gebruikt in een andere tabel
Er is een nieuwe functie in Oracle 12c voor reeksen
Sessiesequenties
Met Oracle Database 12C zijn nieuwe trefwoorden SESSION, GLOBAL beschikbaar die kunnen worden opgegeven tijdens het maken van een reeksCREER SEQUENCE test_session_seq START MET 1 INCREMENT BY 1 SESSION;
CREATE SEQUENCE test_global_seq START WITH 1 INCREMENT BY 1 GLOBAL;
Globaal | Sessie |
creëert een standaardreeks die bekend was in de vorige release. Dit is de standaardinstelling. | creëert een nieuw type sessiereeks, een speciaal type reeks die speciaal is ontworpen om te worden gebruikt met globale tijdelijke tabellen die sessiezichtbaarheid hebben. Sessiereeks retourneert een uniek bereik van volgnummers alleen binnen een sessie, maar niet tussen sessies. Een ander verschil is dat sessiesequenties niet persistent zijn. Als een sessie weggaat, verdwijnt ook de status van de sessiereeksen die tijdens de sessie zijn geopend. |