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_で始まるものもあります。
違いは参照できる範囲が異なります。
カラム | 内容 |
---|---|
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でアクセスするとエラーになるのでご注意ください。