既存の 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 サイトの他の関連記事を参照してください。