Oracle で AUTO_INCREMENT を使用して ID を作成するにはどうすればよいでしょうか? 質問する

Oracle で AUTO_INCREMENT を使用して ID を作成するにはどうすればよいでしょうか? 質問する

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

Oracle 11g で自動増分のように動作する列を作成するにはどうすればよいですか?

ベストアンサー1

Oracle 11g の時点では、 Oracle には「auto_increment」列や「identity」列のようなものはありません。ただし、シーケンスとトリガーを使用して簡単にモデル化できます。

テーブル定義:

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

または、開始値と増分値を指定して、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));

おすすめ記事