ホームページ >データベース >mysql チュートリアル >Oracle で自動インクリメント列を作成する方法: 11g と 12c 以降?

Oracle で自動インクリメント列を作成する方法: 11g と 12c 以降?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-23 23:27:20218ブラウズ

How to Create Auto-Incrementing Columns in Oracle: 11g vs. 12c and Beyond?

Oracle 11g 以降での自動インクリメント列の作成

Oracle データベースには、バージョン 12c まで自動インクリメント列の概念がありません。それにもかかわらず、シーケンスとトリガーを使用して Oracle 11g でこの動作をエミュレートすることができます。

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;

次に、新しい ID に対して一意の ID 値を生成するトリガーを作成します。挿入:

CREATE OR REPLACE TRIGGER dept_bir 
BEFORE INSERT ON departments 
FOR EACH ROW

BEGIN
  SELECT dept_seq.NEXTVAL
  INTO   :new.id
  FROM   dual;
END;

Oracle 12c 以降の更新

Oracle 12c ではネイティブ IDENTITY 列タイプが導入され、真の自動インクリメント機能が提供されます:

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

または、カスタムの開始と増分を指定することもできます値:

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

または、Oracle 12c 以降では、シーケンスをデフォルト値として使用します:

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

以上がOracle で自動インクリメント列を作成する方法: 11g と 12c 以降?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。