Oracle
 sql >> Base de données >  >> RDS >> Oracle

Colonne d'incrémentation automatique - Séquence comme valeur par défaut dans Oracle

La colonne d'incrémentation automatique est une exigence assez courante dans le codage. Voici quelques-unes des façons d'obtenir cela dans Oracle

Incrémentation automatique dans oracle

Cette fonctionnalité (Oracle Auto Increment Column - Sequence as Default Value) n'est pas présente dans la base de données Oracle jusqu'à présent. Mais avec 12c, oracle est capable de fournir cela.

Supposons que nous voulions définir une table oracle où la séquence devrait être auto-incrémentée sur insert . Il existe de nombreuses façons d'y parvenir

Option 1
Avant Oracle 12c, nous devons utiliser des déclencheurs avant insertion pour y parvenir

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;
/

ou

create or replace trigger test_lab_bef_auto
before insert on test_lab
for each row
begin
:new.id := test_lab_seq.nextval;
end;
/

Nous pouvons spécifier quand l'id est nul dans les déclencheurs pour éviter les erreurs lorsque l'instruction d'insertion a une valeur de la colonne 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;

Option 2 :
Avec Oracle 12c, nous pouvons affecter directement la séquence nextval comme valeur par défaut pour une colonne, vous n'avez donc plus besoin de créer un déclencheur pour remplir la colonne avec la valeur suivante de la séquence, il vous suffit de la déclarer avec la définition de table.

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;

Option 3
Avec 12c, nous pouvons utiliser la fonction d'identification

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)
  • Nous pouvons voir que la contrainte NOT NULL est automatiquement imposée sur la colonne Identity
  • Oracle utilise en interne la séquence pour remplir les valeurs de colonne d'auto-incrémentation.
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;

Articles Oracle SQL connexes

comment créer une table dans oracle
Comment créer des vues Oracle
Requêtes Top-N et pagination
comment écrire des requêtes SQL
Traitement de décodage Oracle SQL