Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да създадете идентификатор с AUTO_INCREMENT на Oracle?

Няма такова нещо като „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));


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle CREATE TABLE команда в PL/SQL с 10 примера

  2. TNS-12505:TNS:слушателят в момента не знае за SID, даден в дескриптора на свързване

  3. Функция LEAST() в Oracle

  4. Пример за Oracle Dynamic SQL за вмъкване на запис с помощта на DBMS_SQL

  5. Как да избягате от запетая и двоен кавичка едновременно за CSV файл?