sql >> Database >  >> RDS >> Oracle

Hoe maak je een ID aan met AUTO_INCREMENT op Oracle?

Er bestaat niet zoiets als "auto_increment" of "identity" kolommen in Oracle vanaf Oracle 11g . U kunt het echter gemakkelijk modelleren met een reeks en een trigger:

Tabeldefinitie:

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;

Triggerdefinitie:

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

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

UPDATE:

IDENTITY column is nu beschikbaar op Oracle 12c:

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

of specificeer begin- en ophogingswaarden, waarbij ook het invoegen in de identiteitskolom wordt voorkomen (GENERATED ALWAYS ) (nogmaals, alleen Oracle 12c+)

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

Als alternatief staat Oracle 12 ook toe om een ​​reeks als standaardwaarde te gebruiken:

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


  1. De beste manier om het aantal resultaten te krijgen voordat LIMIT werd toegepast

  2. Fout bij neerzetten van database (kan '.test\' niet rmdir, fout:17)

  3. Tabellen samenvoegen met SUM-probleem in MYSQL

  4. Grote resultatensets streamen met MySQL