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