ORACLE/SEQUENCE編

オラクルちょこっとリファレンス

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;

シーケンスの情報を表示する

シーケンスの情報を表示するには ALL_SEQUENCESデータディクショナリビューを検索します。

シーケンスの情報を表示する
SELECT * FROM ALL_SEQUENCES;

データディクショナリビューには、DBA_やUSER_で始まるものもあります。
 違いは参照できる範囲が異なります。

【ALL_SEQUENCESのカラム】
カラム内容
SEQUENCE_OWNERシーケンスの所有者
SEQUENCE_NAMEシーケンス名
MIN_VALUEシーケンスが取り得る値の最小値
MAX_VALUEシーケンスが取り得る値の最大値
INCREMENT_BYシーケンス発番時の増分
CYCLE_FLAG値が最大値に達した場合、最小値に戻って発番を続けるかどうか
(Y:続ける N:続けない)
ORDER_FLAG発番した順に値が並ぶ事を保証するかどうか
(Y:保証する N:保証しない)
CACHE_SIZEシーケンス値をキャッシュする数
LAST_NUMBER最後に発番された番号(キャッシュとして発番した値を含む)
※CACHE_SIZE=20の時、1件のみ発番した状態だと21となる

シーケンスの使い方

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

構文 (シーケンスの使い方)
シーケンス名.CURRVAL :現セッション内で最後に発番した値を取得
シーケンス名.NEXTVAL :次の値を取得
SEQUENCEの使用例文
--(例)現在のシーケンス番号を取得する SELECT seq01.currval FROM dual; --(例)新たに発番したシーケンス番号を使ったINSERT文 INSERT INTO test_table values(seq01.nextval, 'チョコレート', 200);

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

ToTop