Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie erstelle ich eine ID mit AUTO_INCREMENT auf Oracle?

So etwas wie "auto_increment"- oder "identity"-Spalten gibt es in Oracle ab Oracle 11g nicht mehr . Sie können es jedoch einfach mit einer Sequenz und einem Trigger modellieren:

Tabellendefinition:

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;

Triggerdefinition:

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

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

AKTUALISIERUNG:

IDENTITY -Spalte ist jetzt auf Oracle 12c verfügbar:

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

oder geben Sie Start- und Inkrementwerte an, die auch jegliches Einfügen in die Identitätsspalte verhindern (GENERATED ALWAYS ) (wiederum nur Oracle 12c+)

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

Alternativ erlaubt Oracle 12 auch die Verwendung einer Sequenz als Standardwert:

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