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

Cos'è la sequenza in oracolo

Cos'è la sequenza in Oracle

  • Oracle Sequence è un oggetto creato dall'utente che può essere condiviso da più utenti per generare numeri interi univoci
  • L'uso più generale delle sequenze sarebbe generare una colonna chiave primaria nella tabella.
  • La sequenza è generata dalla routine interna di Oracle, quindi non dobbiamo preoccuparci di . Risparmierà tim3 poiché lo sviluppatore non ha bisogno di generare la routine di produzione della sequenza
  • Un generatore di numeri sequenziali, può essere configurato per aumentare o diminuire
  • Esiste solo nel dizionario dei dati, può essere limitato o ripetibile (ciclo).
  • Abbiamo bisogno del privilegio di creare sequenza per creare la sequenza

La creazione di una sequenza viene eseguita utilizzando il

CREA SEQUENZA

[INIZIA CON]

[INCREMENTO DI]

[NO/VALORE MINIMO]

[VALORE NO/MAX]

[NO/CICLO]

[NO/CACHE];

Descrizione di ogni valore

 

INIZIA CON Definisce il valore iniziale della sequenza (default 1 ),
INCREMENTA DI Definisce il livello di aumento o diminuzione (default 1 ),
VALORE MIN Definisce il valore più basso per una sequenza decrescente
VALORE MAX Definisce il valore più alto per una sequenza crescente
CICLO Definisce se la sequenza si ripeterà
CACHE Definisce il blocco di numeri di sequenza tenuti in memoria (default 20 ), NOCACHE forza l'aggiornamento del dizionario dati per ogni numero generato dalla sequenza

Esempi

 

crea sequenza test_tech inizia con 1
incrementa di 1
valore massimo 10000
ciclo
cache 20;

crea sequenza test_tech1

inizia con 1
incremento di 1
valore massimo 4500000
ciclo
nocache;

 

Come usare le sequenze

Per usare la sequenza usa semplicemente la pseudo colonna CURRVAL e NEXTVAL

Pseudo colonna NEXTVAL 

Viene utilizzato per generare il numero di sequenza successivo della sequenza specificata

Pseudo colonna CURRVAL 

Contiene la sequenza che l'utente ha appena generato

SELEZIONARE TEST_TECH.NEXTVAL DA DUAL;

SELEZIONA TEST_TECH.CURRVAL DA DUAL;

SELEZIONA TEST_TECH.NEXTVAL DA DUAL;

Come modificare le sequenze

Possiamo modificare le sequenze usando alter sequence.

SQL> ALTER SEQUENCE tech_test1 INCREMENTO DI 50;

Le modifiche influiscono solo sull'utilizzo futuro della sequenza.

Devi essere il proprietario o avere il privilegio di modifica su quella sequenza

Non possiamo cambiare inizio con opzione. Perché questa sequenza deve essere eliminata e ricreata

Anche le modifiche alla sequenza vengono convalidate

Come eliminare la sequenza

L'eliminazione di una vista viene eseguita utilizzando il comando DROP sequenza.

Sequenza di drop test_tech ;

Viste del dizionario per vedere i dati della sequenza

i dettagli della sequenza possono essere interrogati dal dizionario eseguendo una query su USER_SEQUENCES, ALL_ SEQUENCES o DBA_ SEQUENCES. Esistono tre categorie di viste

USER_% Questa vista contiene informazioni sugli oggetti di proprietà solo dell'utente

Esempio

USER_TABLES, USER_TAB_COLS

TUTTO-% Questa vista contiene informazioni sugli oggetti a cui l'utente può accedere nel database.

Esempio

ALL_TABLES,ALL_TAB_COLS

DBA_% Questa vista contiene informazioni su tutti gli oggetti  nel sistema e si tratta di viste riservate accessibili all'utente che ha un ruolo DBA

Esempio

DBA_TABLES,DBA_TAB_COLS

  DBA_% visualizzazioni sulle informazioni sulle sequenze ALL_% di visualizzazioni sulle informazioni sulle sequenze USER_% visualizzazioni sulle informazioni sulle sequenze
Visualizza su sequenze informazioni dba_sequences tutte_ sequenze user_sequenze

Elencare tutte le sequenze possedute dall'uso corrente

seleziona nome_sequenza da sequenze_utente;

Per elencare tutte le sequenze in un database:

Seleziona proprietario, nome_sequenza da dba_sequences;

Per elencare le sequenze accessibili all'utente corrente:

seleziona nome_sequenza da all_sequences

Come determinare tutte le informazioni sulla sequenza?

seleziona nome_sequenza, valore_min, valore_max, incremento_per, ultimo_numero
DA SEQUENZE_DBA

dove PROPRIETARIO =''
e NOME_sequenza  ='';

Come recuperare il valore corrente di una sequenza di oracoli senza incrementarlo

La colonna last_number mostra il successivo numero di sequenza disponibile se non è specificata alcuna cache

SELEZIONARE last_number

DA sequenze_utente

DOVE nome_sequenza ='';

Come estrarre la definizione di sequenza (istruzioni DDL) da un database Oracle senza dover passare attraverso una pila di viste del dizionario

Sintassi:

SQL> set long 1000
SQL> set pagesize 0select DBMS_METADATA.GET_DDL('SEQUENCE','') from DUAL;

Come impostare il valore LASTVALUE in una sequenza Oracle

ALTER SEQUENCE tech_seq_name INCREMENTO DI 250;

SELECT tech_seq_name.nextval DA dual;

ALTER SEQUENCE tech_seq_name  INCREMENTA DI 1;

Come reimpostare una sequenza in Oracle

Ci sono molti modi.

a) Possiamo rilasciare e ricreare la sequenza. Ma questo invalida tutti gli oggetti dipendenti (trigger/procedure memorizzate, ecc.)

b) Possiamo ripristinare con questi semplici passaggi

Passaggio 1:trova l'ultimo valore della sequenza

Seleziona tech_seq_name.nextval DA dual;

Passaggio 2:modifica la sequenza con l'incremento del valore negativo dell'ultimo valore

ALTER SEQUENCE tech_seq_name INCREMENT BY -  valore minimo 0;

Passaggio 3  Esegui nextval per reimpostarlo su zero

SELECT tech_seq_name.nextval DA dual;

Passaggio 4:riporta l'incremento a 1

ALTER SEQUENCE tech_seq_name  INCREMENTA DI 1;

Esempio

SELECT tech_seq_name.nextval DA dual;

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

250

ALTER SEQUENCE tech_seq_name INCREMENTO DI -250;

SELECT tech_seq_name.nextval DA dual;

ALTER SEQUENCE tech_seq_name  INCREMENTA DI 1;

Puoi trovare di più a questo link

Come resettare la sequenza

Impatto della memorizzazione nella cache delle sequenze

Le sequenze vengono memorizzate nella cache allo scopo di migliorare le prestazioni di recupero. In RAC, ogni istanza memorizza i valori della cache

Possiamo avere delle lacune in sequenza quando si utilizza la cache per i seguenti motivi

  1. Si verifica un rollback
  2. Arresto anomalo del sistema o arresto anomalo dell'istanza
  3. La sequenza è usata in un'altra tabella

C'è una nuova funzionalità in Oracle 12c per le sequenze

Sequenze delle sessioni

Con Oracle Database 12C sono disponibili nuove parole chiave SESSION, GLOBAL che possono essere specificate durante la creazione di una sequenza
CREATE SEQUENCE test_session_seq INIZIA CON 1 INCREMENTO DI 1 SESSIONE;
CREATE SEQUENCE test_global_seq INIZIA CON 1 INCREMENTO DI 1 GLOBAL;

Globale Sessione
crea una sequenza standard ben nota nella versione precedente. Questa è l'impostazione predefinita. crea un nuovo tipo di sequenza di sessione, che è un tipo speciale di sequenza progettato specificamente per essere utilizzato con tabelle temporanee globali con visibilità della sessione. La sequenza di sessione restituisce un intervallo univoco di numeri di sequenza solo all'interno di una sessione, ma non tra sessioni. Un'altra differenza è che le sequenze di sessione non sono persistenti. Se una sessione scompare, lo stesso accade per lo stato delle sequenze di sessione a cui si è avuto accesso durante la sessione.