sql >> Database >  >> RDS >> Oracle

Wat is reeks in orakel

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
verhoging met 1
maxvalue 4500000
cyclus
nocache;

 

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’,'’) van DUAL;

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 -  minwaarde 0;

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

  1. Terugdraaien vindt plaats
  2. Systeemcrash of instantiecrash
  3. 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 reeks
CREER 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.


  1. DROP TABEL INDIEN BESTAAT in MariaDB

  2. Hoe stel ik programmatisch de verbindingsreeks in voor Entity-Framework Code-First?

  3. Sluit me aan bij Special Guest Michal Bar van het MS Access-team!

  4. Replicatieoplossingen van Oracle en MySQL vergelijken