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