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 |
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','
|
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 - 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
- Si verifica un rollback
- Arresto anomalo del sistema o arresto anomalo dell'istanza
- 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 sequenzaCREATE 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. |