La colonna di incremento automatico è un requisito abbastanza comune nella codifica. Ecco alcuni dei modi per ottenerlo in Oracle
Incremento automatico in Oracle
Questa funzione (colonna Oracle Auto Increment – Sequence as Default Value) non è finora presente nel database Oracle. Ma con 12c, Oracle è in grado di fornirlo.
Supponiamo di voler impostare una tabella Oracle in cui la sequenza dovrebbe essere incrementata automaticamente su insert . Ci sono molti modi per ottenerlo
Opzione 1
Prima di Oracle 12c, era necessario utilizzare prima di inserire i trigger per ottenerlo
create table test_lab ( id number primary key name varchar (10) ); create sequence test_lab_seq start with 1 increment by 1 nocycle; create or replace trigger test_lab_bef_auto before insert on test_lab for each row begin select test_lab_seq.nextval into :new.id from dual; end; /
o
create or replace trigger test_lab_bef_auto
before insert on test_lab
for each row
begin
:new.id := test_lab_seq.nextval;
end;
/
Possiamo specificare quando l'id è nullo nei trigger per evitare errori quando l'istruzione insert ha un valore della colonna id
insert into test_lab values ('john'); insert into test_lab values ('scott'); insert into test_lab values ('bill'); insert into test_lab values ('tom'); insert into test_lab values ('Duke'); commit; select * from test_lab;
Opzione 2:
Con Oracle 12c, possiamo assegnare direttamente la sequenza nextval come valore predefinito per una colonna, quindi non è più necessario creare un trigger per popolare la colonna con il valore successivo della sequenza, devi solo dichiararlo con la definizione della tabella.
create sequence test_lab_seq start with 1 increment by 1 nocycle; create table test_lab ( id number default test_lab_seq.nextval primary key ); insert into test_lab values ('Cat1'); insert into test_lab values ('Cat2'); insert into test_lab values ('Cat3'); insert into test_lab values ('Cat4'); insert into test_lab values ('Cat5'); commit; select * from test_lab;
Opzione 3
Con 12c, possiamo utilizzare la funzione di identificazione
create table test_lab ( id number(10) GENERATED AS IDENTITY, name varchar(15) ); Table created. Desc TEST_LAB Name Null? Type ---- ---- ---- ID NOT NULL NUMBER(10) NAME VARCHAR2(15)
- Possiamo vedere che il vincolo NOT NULL viene imposto automaticamente alla colonna Identity
- Oracle utilizza internamente la sequenza per popolare i valori delle colonne con incremento automatico.
insert into test_lab values ('London'); insert into test_lab values ('New york'); insert into test_lab values ('Tokyo'); insert into test_lab values ('Delhi'); insert into test_lab values ('Bangalore'); commit; select * from test_lab;
Articoli Oracle Sql correlati
come creare una tabella in Oracle
Come creare viste Oracle
Prime N query e impaginazione
Come scrivere query sql
Elaborazione della decodifica Oracle sql