Auto Increment Columnは、コーディングにおける非常に一般的な要件です。 Oracleでそれを取得する方法のいくつかを次に示します
Oracleでの自動インクリメント
この機能(Oracle Auto Increment Column –デフォルト値としてのシーケンス)は、これまでのところOracleデータベースには存在しません。しかし、12cを使用すると、オラクルはそれを提供できます。
挿入時にシーケンスを自動インクリメントする必要があるOracleテーブルを設定するとします。それを達成する方法はたくさんあります
オプション1
Oracle 12cより前は、トリガーを挿入する前に使用する必要があります
create table test_lab ( id number primary key name varchar (10) ); create sequence test_lab_seq start with 1 increment by 1 nocycle; create or replace trigger test_lab_bef_auto before insert on test_lab for each row begin select test_lab_seq.nextval into :new.id from dual; end; /
または
create or replace trigger test_lab_bef_auto
before insert on test_lab
for each row
begin
:new.id := test_lab_seq.nextval;
end;
/
トリガーでidがnullになるタイミングを指定して、挿入ステートメントにid列の値がある場合のエラーを回避できます
insert into test_lab values ('john'); insert into test_lab values ('scott'); insert into test_lab values ('bill'); insert into test_lab values ('tom'); insert into test_lab values ('Duke'); commit; select * from test_lab;
オプション2:
Oracle 12cを使用すると、列のデフォルト値としてシーケンスnextvalを直接割り当てることができるため、列にシーケンスの次の値を入力するトリガーを作成する必要がなくなり、次のように宣言するだけで済みます。テーブルの定義。
create sequence test_lab_seq start with 1 increment by 1 nocycle; create table test_lab ( id number default test_lab_seq.nextval primary key ); insert into test_lab values ('Cat1'); insert into test_lab values ('Cat2'); insert into test_lab values ('Cat3'); insert into test_lab values ('Cat4'); insert into test_lab values ('Cat5'); commit; select * from test_lab;
オプション3
12cでは、識別機能を使用できます
create table test_lab ( id number(10) GENERATED AS IDENTITY, name varchar(15) ); Table created. Desc TEST_LAB Name Null? Type ---- ---- ---- ID NOT NULL NUMBER(10) NAME VARCHAR2(15)
- NOTNULL制約がIdentity列に自動的に課されていることがわかります
- Oracleは内部的にシーケンスを使用して、自動インクリメント列の値を設定します。
insert into test_lab values ('London'); insert into test_lab values ('New york'); insert into test_lab values ('Tokyo'); insert into test_lab values ('Delhi'); insert into test_lab values ('Bangalore'); commit; select * from test_lab;
関連するOracleSQLの記事
Oracleでテーブルを作成する方法
Oracleビューを作成する方法
Top-Nクエリとページネーション
SQLクエリを作成する方法
OracleSQLデコード処理