Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como criar id com AUTO_INCREMENT no Oracle?


Não existem colunas "auto_increment" ou "identity" no Oracle a partir do Oracle 11g . No entanto, você pode modelá-lo facilmente com uma sequência e um gatilho:

Definição da tabela:
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;

Definição do gatilho:
CREATE OR REPLACE TRIGGER dept_bir 
BEFORE INSERT ON departments 
FOR EACH ROW

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

ATUALIZAÇÃO:


IDENTITY coluna agora está disponível no Oracle 12c:
create table t1 (
    c1 NUMBER GENERATED by default on null as IDENTITY,
    c2 VARCHAR2(10)
    );

ou especifique valores iniciais e de incremento, evitando também qualquer inserção na coluna de identidade (GENERATED ALWAYS ) (novamente, apenas Oracle 12c+)
create table t1 (
    c1 NUMBER GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1),
    c2 VARCHAR2(10)
    );

Alternativamente, o Oracle 12 também permite usar uma sequência como valor padrão:
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));