sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo crear una identificación con AUTO_INCREMENT en Oracle?

No existen las columnas "auto_incremento" o "identidad" en Oracle a partir de Oracle 11g . Sin embargo, puedes modelarlo fácilmente con una secuencia y un disparador:

Definición de tabla:

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;

Definición de disparador:

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

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

ACTUALIZAR:

IDENTITY la columna ahora está disponible en Oracle 12c:

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

o especificar valores de inicio e incremento, evitando también cualquier inserción en la columna de identidad (GENERATED ALWAYS ) (de nuevo, solo Oracle 12c+)

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

Alternativamente, Oracle 12 también permite usar una secuencia como valor predeterminado:

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