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

Colonna di incremento automatico:sequenza come valore predefinito in Oracle

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