Няма такова нещо като „auto_increment“ или „identity“ колони в Oracle от Oracle 11g . Можете обаче лесно да го моделирате с последователност и задействане:
Дефиниция на таблицата:
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;
Дефиниция на тригера:
CREATE OR REPLACE TRIGGER dept_bir
BEFORE INSERT ON departments
FOR EACH ROW
BEGIN
SELECT dept_seq.NEXTVAL
INTO :new.id
FROM dual;
END;
/
АКТУАЛИЗИРАНЕ:
IDENTITY
колоната вече е налична в Oracle 12c:
create table t1 (
c1 NUMBER GENERATED by default on null as IDENTITY,
c2 VARCHAR2(10)
);
или посочете начални и нарастващи стойности, като също така предотвратявате всяко вмъкване в колоната за идентичност (GENERATED ALWAYS
) (отново само за Oracle 12c+)
create table t1 (
c1 NUMBER GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1),
c2 VARCHAR2(10)
);
Като алтернатива, Oracle 12 също позволява да се използва последователност като стойност по подразбиране:
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));