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

12c Colonna di autopopolamento con valore di sequenza

Nel post del blog di ieri, ho scritto sulla creazione di una tabella con un valore IDENTITY. Ma la nuova funzionalità di Oracle 12c che mi piace di più è consentire a una sequenza di essere il generatore di numeri per il valore predefinito di una colonna. Per capire cosa intendo, guarda questo esempio:

SQL> create sequence test_seq;
Sequence created.
SQL> create table test_tab (id number default test_seq.NEXTVAL, val varchar2(20));
Table created.

Come puoi vedere, la colonna ID della mia tabella di test ha una clausola DEFAULT che utilizza il NEXTVAL della sequenza che ho creato. Ora inseriamo alcuni dati nella tabella.

SQL> insert into test_tab (val) values ('first row');
1 row created.
SQL> insert into test_tab (val) values ('second row');
1 row created.
SQL> commit;
Commit complete.
SQL> select * from test_tab;
ID VAL
---------- --------------------
1 first row
2 second row

Come puoi vedere, la sequenza Oracle è stata utilizzata per popolare i valori. A prima vista, ciò semplificherebbe la vita al modellatore di dati perché non sarebbe necessario seguire il percorso tradizionale di codifica di un trigger per generare NEXTVAL e assegnare questo valore alla colonna. Tuttavia, questo popolamento automatico del valore della colonna con la sequenza funziona solo se non si specifica un valore, se lo si lascia predefinito. Se dichiari esplicitamente il valore, questo metodo non utilizzerà la sequenza. Un trigger, se codificato correttamente, forzerebbe l'uso del valore successivo della sequenza per la colonna.