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

Comment créer un identifiant avec AUTO_INCREMENT sur Oracle ?

Il n'y a pas de colonnes "auto_increment" ou "identity" dans Oracle à partir d'Oracle 11g . Cependant, vous pouvez le modéliser facilement avec une séquence et un déclencheur :

Définition du tableau :

CREATE TABLE departments (
  ID           NUMBER(10)    NOT NULL,
  DESCRIPTION  VARCHAR2(50)  NOT NULL);

ALTER TABLE departments ADD (
  CONSTRAINT dept_pk PRIMARY KEY (ID));

CREATE SEQUENCE dept_seq START WITH 1;

Définition du déclencheur :

CREATE OR REPLACE TRIGGER dept_bir 
BEFORE INSERT ON departments 
FOR EACH ROW

BEGIN
  SELECT dept_seq.NEXTVAL
  INTO   :new.id
  FROM   dual;
END;
/

MISE À JOUR :

IDENTITY est désormais disponible sur Oracle 12c :

create table t1 (
    c1 NUMBER GENERATED by default on null as IDENTITY,
    c2 VARCHAR2(10)
    );

ou spécifiez des valeurs de départ et d'incrément, empêchant également toute insertion dans la colonne d'identité (GENERATED ALWAYS ) (encore une fois, Oracle 12c+ uniquement)

create table t1 (
    c1 NUMBER GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1),
    c2 VARCHAR2(10)
    );

Alternativement, Oracle 12 permet également d'utiliser une séquence comme valeur par défaut :

CREATE SEQUENCE dept_seq START WITH 1;

CREATE TABLE departments (
  ID           NUMBER(10)    DEFAULT dept_seq.nextval NOT NULL,
  DESCRIPTION  VARCHAR2(50)  NOT NULL);

ALTER TABLE departments ADD (
  CONSTRAINT dept_pk PRIMARY KEY (ID));