ここではOracleのシーケンスの作成・変更・削除について紹介します。

シーケンスとは

シーケンスはレコードに連番を振りたい時に、自動で連番を生成するオブジェクトです。


シーケンスを作成する

CREATE SEQUENCE

シーケンスの作成は、CREATE SEQUENCE文を使用します。

構文

CREATE [OR REPLACE] SEQUENCE {シーケンス名}
    [START WITH 初期値]
    [INCREMENT BY 増分値]
    [MAXVALUE 最大値 | NOMAXVALUE]
    [MINVALUE 最小値 | NOMINVALUE]
    [CYCLE | NOCYCLE ]
    [CACHE キャッシュ数 | NOCYCLE]
;


パラメータ説明
START WITH連番の初期値を指定します。
INCREMENT BY連番の増分値を指定します。
MAXVALUE連番の最大値を指定します。
最大値を指定しない場合はNOMAXVALUEを指定します。
MINVALUE連番の最小値を指定します。
最小値を指定しない場合はNOMINVALUEを指定します。
CYCLE最大値に達すると最小値になります。
最小値に達すると最大値になります。
NOCYCLE最大値または最小値に達した場合、それ以上値を生成しません。
CACHE高速にアクセスできるようにメモリ上に値を保持しておくキャッシュ数です。
NOCACHEを指定するとキャッシュを割り当てません。


以下は1から始まり1ずつ増分して最大値999に達したら最小値1になるCREATE SEQUENCE文です。

CREATE SEQUENCE SEQ_SAMPLE
    START WITH 1
    INCREMENT BY 1
    MAXVALUE 999
    MINVALUE 1
    CYCLE
;


シーケンスを進める

NEXTVALは次のシーケンスの値を取得します。

構文

SELECT {シーケンス名}.NEXTVAL FROM DUAL;


以下はNEXTVALでシーケンス「seq_sample」を進めるSELECT文です。

SELECT seq_sample.NEXTVAL FROM DUAL;


シーケンスの現在値を確認する

CURRVALはシーケンスの現在値を取得します。

構文

--増分値を変更する
ALTER SEQUENCE {シーケンス名} INCREMENT BY 増分値 NOCACHE;

--シーケンスを進める
SELECT {シーケンス名}.NEXTVAL FROM DUAL;


以下はシーケンス「seq_sample」の増分値を100に変更するALTER SEQUENCE文とSELECT文です。

--増分値を99に変更する
ALTER SEQUENCE seq_sample INCREMENT BY 99 NOCACHE;

--シーケンスを1つ進めて100にする
SELECT seq_sample.NEXTVAL FROM DUAL;


シーケンスを削除する

DROP SEQUENCE

シーケンスの削除は、DROP SEQUENCE文を使用します。

構文

DROP SEQUENCE {シーケンス名};


以下はシーケンス「seq_sample」を削除するDROP SEQUENCE文です。

DROP SEQUENCE seq_sample;


以上、Oracleのシーケンスの作成・変更・削除について解説しました。