SQL SEQUENCE e NEXTVAL





SQL > SQL Avanzato > SEQUENCE e NEXTVAL

Oracle utilizza il concetto di SEQUENCE per creare valori numerici di chiave primaria mentre aggiungiamo righe di dati a una tabella. Mentre la popolazione di chiavi primarie numeriche per MySQL e SQL Server è legata a singole tabelle, in Oracle la costruzione della SEQUENCE è creata separatamente e non è legata a una tabella specifica.

Sintassi

La sintassi per creare una sequenza in Oracle è la seguente:

CREATE SEQUENCE SEQUENCE_NAME
[START WITH {Initial_Value}]
[INCREMENT BY {interval}];

{Initial_Value} è il valore iniziale della sequenza, e {interval} è l'intervallo tra i numeri di sequenza consecutivi. Sia [START WITH] che [INCREMENT BY] sono campi opzionali. Se non vengono specificati, il valore predefinito per {Initial_Value} e {interval} è entrambi 1.

Esempio

Supponiamo di avere una tabella con la seguente struttura:

Tabella USER_TABLE
 Nome di Colonna  Tipo di Dati 
 Userid  integer 
 Last_Name  varchar(50) 
 First_Name  varchar(50) 

e vogliamo utilizzare la seguente sequenza per generare il userid:

CREATE SEQUENCE SEQ_USER START WITH 5 INCREMENT BY 5;

Specifichiamo che vogliamo utilizzare la sequenza e la funzione NEXTVAL nelle dichiarazioni INSERT INTO nell'ordine seguente:

INSERT INTO USER_TABLE VALUES (SEQ_USER.NEXTVAL, 'Washington', 'George');

INSERT INTO USER_TABLE VALUES (SEQ_USER.NEXTVAL, 'Jefferson', 'Thomas');

Ora la tabella ha le seguenti due righe:

Tabella USER_TABLE
 Userid  Last_Name  First_Name 
 5  Washington  George 
 10  Jefferson  Thomas 

È interessante notare che una sequenza è indipendente da una tabella. In altre parole, una sequenza può essere utilizzata per generare valori di chiave primaria per più tabelle, e la sequenza continua anche se viene applicata a una tabella diversa. Quindi, diciamo, ad esempio, che abbiamo una seconda tabella, Table NEW_USERS, che ha la stessa struttura della tabella USER_TABLE, e emettiamo il seguente comando SQL dopo aver eseguito i due comandi SQL sopra:

INSERT INTO NEW_USER VALUES (SEQ_USER.NEXTVAL, 'Adams', 'John');

Tabella NEW_USER avrà la seguente riga:

Tabella NEW_USER
 Userid  Last_Name  First_Name 
 15  Adams  John 

Userid è 15 perché è il valore successivo dopo 10.

SQL NULL >>

Questa pagina è stata aggiornata l'ultima volta il 26/12/2023



Copyright © 2024   1keydata.com   Tutti i diritti riservati