HOME > SEQUENCE編

SEQUENCE(シーケンス/順序)

シーケンスとは、例えばレコードに一意になる番号を振りたいというような時に、その番号を自動生成してくれるオブジェクトです。
シーケンスを使うと条件に沿った一意の番号を簡単に振ることできます。

シーケンスの作成

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

 CREATE SEQUENCE構文
CREATE [OR REPLACE] SEQUENCE 順序名
  [ START WITH 初期値 ]
  [ INCREMENT BY 増分値 ]
  [ MAXVALUE 最大値 | NOMAXVALUE ]
  [ MINVALUE 最小値 | NOMINVALUE ]
  [ CYCLE | NOCYCLE ]
  [ CACHE キャッシュ数 | NOCYCLE ]
;

パラメータ 説明
OR REPLACE 同名のシーケンスが既に存在した時でも、構わず上書きする場合に指定する
START WITH 初期値の設定
ここで設定した値から采番が開始する
INCREMENT BY 増分の設定
ここで指定した数だけ増えていく
MAXVALUE 最大値 | NOMAXVALUE インクリメントする最大値の設定
NOMAXVALUEを設定すると最大値はナシ。
MINVALUE 最小値 | NOMINVALUE 増分がマイナスの時の最小値の設定
NOMINVALUEを設定すると最小値はナシ。
CYCLE | NOCYCLE 最大値に達したときにシーケンスをループするかしないかの設定
CACHE キャッシュ数 | NOCACHE シーケンスに高速にアクセスするために、メモリー上に値を保持しておく場合に指定する。(デフォルト値は、キャッシュ数=20)
SEQUENCEの作成例文
--(例)CREATE SEQUENCE文の例
CREATE SEQUENCE seq01
  START WITH 1
  INCREMENT BY 1
  MAXVALUE 500
  MINVALUE 1
  CYCLE
;

この例だと、1から発番して、1づつ増えて、最大値が500で、500まで発番されるとまた1から発番するシーケンスが作成されます。

CREATE SEQUENCEの実行には以下の権限が必要です。

  • 自スキーマに作成する場合:「CREATE SEQUENCE」システム権限
  • 他スキーマに作成する場合:「CREATE ANY SEQUENCE」システム権限

シーケンスの変更

シーケンスを変更するには ALTER SEQUENCE句を使用します。

 ALTER SEQUENCE構文
ALTER SEQUENCE 順序名
  [ INCREMENT BY 増分値 ]
  [ MAXVALUE 最大値 | NOMAXVALUE ]
  [ MINVALUE 最小値 | NOMINVALUE ]
  [ CYCLE | NOCYCLE ]
  [ CACHE キャッシュ数 | NOCYCLE ]
;

変更では初期値は指定できません。 各パラメータは、上記「シーケンスの作成」の所をごらんください。

シーケンスの削除

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

 DROP SEQUENCE構文
DROP SEQUENCE <シーケンス名>;

シーケンスの削除例文
--(例)シーケンス(シーケンス名:test_seq)を削除する。
DROP SEQUENCE test_seq;

シーケンスの使い方

シーケンスは以下のように使用します。

 構文 (シーケンスの使い方)
シーケンス名.CURRVAL :現在値の取得
シーケンス名.NEXTVAL :次の値を取得

SEQUENCEの使用例文
--(例)現在のシーケンス番号を取得する
SELECT seq01.currval FROM dual;

--(例)新たに発番したシーケンス番号を使ったINSERT文
INSERT INTO test_table values(seq01.nextval, 'チョコレート', 200);

シーケンス作成後、1度もNEXTVALにてアクセスしていない状態で、CURRVALでアクセスするとエラーになるのでご注意ください。