Oracle 11g での AUTO_INCREMENT のような列の作成
11g までの Oracle バージョンでは、AUTO_INCREMENT 列タイプはネイティブで使用できません。ただし、同様の機能を実現する代替メカニズムもあります。
シーケンスとトリガーの使用
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;
トリガー定義:
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 )
Oracle 12c 以降では、IDENTITY 列タイプが導入され、真の自動インクリメント機能が提供されました:
テーブル定義:
create table t1 ( c1 NUMBER GENERATED by default on null as IDENTITY, c2 VARCHAR2(10) );
この定義は、新しい行が挿入されるたびに自動的に増加する列 'c1' を作成します。
または、開始値と増分値を指定できます。
create table t1 ( c1 NUMBER GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1), c2 VARCHAR2(10) );
デフォルト値としてシーケンスを使用する (Oracle 12)
別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) );
このアプローチでは、シーケンスを使用して増分値を割り当てますが、実際の増分操作はデータベースによって管理されます。
以上がOracle 11g 以降で自動インクリメント列を作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。