sql >> Databasteknik >  >> RDS >> Oracle

Hur skapar man id med AUTO_INCREMENT på Oracle?

Det finns inget sådant som kolumner "auto_increment" eller "identity" i Oracle från Oracle 11g . Du kan dock enkelt modellera den med en sekvens och en trigger:

Tabelldefinition:

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

UPPDATERING:

IDENTITY kolumnen är nu tillgänglig på Oracle 12c:

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

eller ange start- och inkrementvärden, vilket också förhindrar infogning i identitetskolumnen (GENERATED ALWAYS ) (igen, endast Oracle 12c+)

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

Alternativt tillåter Oracle 12 också att använda en sekvens som standardvärde:

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. Hur får jag gem-installationen att fungera på OS X Lion med Ruby 1.8.7 utan att det blir fel?

  2. Returnera en lista över servertriggerhändelser i SQL Server

  3. Hur man distribuerar Percona Distribution för PostgreSQL för hög tillgänglighet

  4. Överför kontrollen till en specifik rad med hjälp av kommandot Goto Label i PLSQL