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