1. ホーム
  2. sql

[解決済み】OracleでAUTO_INCREMENTでidを作成する方法は?

2022-03-24 23:41:54

質問

バージョン11gまでのOracleには、AUTO_INCREMENTの概念がないようです。

Oracle 11g で自動インクリメントのような動作をするカラムを作成するにはどうすればよいですか。

どのように解決するのですか?

Oracle には、quot;auto_increment" や "identity" といったカラムは存在しない。 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;
/

UPDATE

IDENTITY カラムがOracle 12cで使用できるようになりました。

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

または開始値と増加値を指定し、ID 列への挿入を防ぐこともできます ( 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));