ホームページ > データベース > mysql チュートリアル > 既存の Oracle テーブル列に自動インクリメント機能を追加するにはどうすればよいですか?

既存の Oracle テーブル列に自動インクリメント機能を追加するにはどうすればよいですか?

DDD
リリース: 2024-12-19 02:52:09
オリジナル
961 人が閲覧しました

How to Add Auto-Incrementing Functionality to Existing Oracle Table Columns?

既存の Oracle テーブル列の自動インクリメント

Oracle では、主キーを持つ既存の列に自動インクリメント機能を追加できます。 Oracle のバージョンに応じて方法が異なります。

Oracle 11g および前

列の値をインクリメントするシーケンスを作成します:

CREATE SEQUENCE t_seq
START WITH 150111111
INCREMENT BY 1;
ログイン後にコピー

挿入中にトリガーを使用して次のシーケンス値を列に割り当てます:

CREATE OR REPLACE TRIGGER t_trg
BEFORE INSERT ON t
FOR EACH ROW
WHEN (new.id IS NULL)
BEGIN
    SELECT t_seq.NEXTVAL
    INTO   :new.id
    FROM   dual;
END;
ログイン後にコピー

Oracle 12c 以降

Oracle 12c では Identity 列が導入されました。これにより、シーケンスやトリガーを必要とせずに値を自動インクリメントできます。

CREATE TABLE t
(
    ID NUMBER GENERATED ALWAYS AS IDENTITY
    START WITH 150111111 INCREMENT BY 1,
    text VARCHAR2(50)
);
ログイン後にコピー
ログイン後にコピー

列が配置されると、指定された開始値から新しい行が自動インクリメントされます。

Oracle を使用した例11g

テーブルを指定します:

TABLE t (
 SEQ_ID NUMBER(10) NOT NULL
);
ログイン後にコピー

シーケンス "t_seq" とトリガー "t_trg" を作成した後、新しい行を挿入します:

INSERT INTO t(text) VALUES('auto-increment test 1');
INSERT INTO t(text) VALUES('auto-increment test 2');
ログイン後にコピー

テーブルをクエリして確認します。自動インクリメント:

SELECT * FROM t;
ログイン後にコピー
ログイン後にコピー

Oracle 12c を使用した例

次のように定義されたテーブルを使用:

CREATE TABLE t
(
    ID NUMBER GENERATED ALWAYS AS IDENTITY
    START WITH 150111111 INCREMENT BY 1,
    text VARCHAR2(50)
);
ログイン後にコピー
ログイン後にコピー

新しい行を挿入:

INSERT INTO t(text) VALUES('This table has an identity column');
ログイン後にコピー

テーブルにクエリを実行します確認:

SELECT * FROM t;
ログイン後にコピー
ログイン後にコピー

どちらの Oracle バージョンでも、列「ID」は、指定された開始値 (150111111) から 1 ずつ自動インクリメントされます。

以上が既存の Oracle テーブル列に自動インクリメント機能を追加するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート