シーケンス(順序)の作成方法と削除方法

ORACLE

例えば、一意で通しの伝票番号を自動で採番したいなど、そういった場合に便利なのが、シーケンス(順序)です。

本記事では、ORACLEのシーケンスの作成や削除の方法について、まとめました。

ちなみに、シーケンスの使用方法については、こちらの記事を参照ください。

スポンサーリンク

シーケンス(順序)とは

シーケンス(順序)とは、一意の整数を生成するときに使用できるオブジェクトです。

大きな利点は、同時に接続される複数のセッション間でも、一意の値を容易に生成できる点です。これは、コミットやロールバックに影響せずに、順序から整数を取得した段階で、順序がカウントアップ(またはカウントダウン)されるためです。

例えば、受注テーブルの主キーである伝票番号を一意に採番したい場合に、使用します。

スポンサーリンク

文法

作成

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

INCREMENT BY 増分値
採番の増分間隔を指定します。0以外の正の整数、または負の整数を指定します。省略した場合は、1をなります。

START WITH 初期値
初期値(最初に採番される値)を指定します。省略した場合は、昇順の時は順序の最小値、降順の時は順序の最大値になります。

MAXVALUE 最大値 | NOMAXVALUE
採番される最大値を指定します。
NOMAXVALUE、または省略した場合は、昇順の時は10の28乗-1、降順の場合は-1になります。

MINVALUE 最小値 | NOMINVALUE
採番される最小値を指定します。
NOMINVALUE、または省略した場合は、昇順の時は1、降順の場合は-(10の27乗-1)になります。

CYCLE | NOCYCLE
CYCLEを指定すると、昇順の時は最大値に達しても、引き続き最小値から採番を続けます。
NOCYCLEを指定、または省略した場合は、エラー(ORA-08004)になります。

CACHE キャッシュ数 | NOCACHE
CACHEを指定すると、処理速度向上のために共有プール上にキャッシュ数分の値を保持しておきます。
初回の採番時や保持していた値を使い切った次の採番時にシーケンスにアクセスしてキャッシュ数分の値を保持します。
NOCACHEを指定すると、共有プール上の保持は行いません。省略した場合は、20個の値をキャッシュします。

ORDER | NOORDER
RAC環境のみに影響します。
ORDERを指定すると、必ず要求順に採番されます。
NOORDERを指定、または省略した場合、要求順での採番は保証されません。
RAC環境以外では、この設定に関わらず必ず要求順に採番されます。

使用例

以下、シーケンス作成(増分値1、最小値1、最大値999999、循環あり、キャッシュ20)の例です。

CREATE SEQUENCE test_seq1
INCREMENT BY 1    -- 省略可
START WITH 1      -- 省略可
MAXVALUE 999999
MINVALUE 1        -- 省略可
CYCLE
CACHE 20          -- 省略可
;

変更

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

各オプションは、作成時と同じですが、初期値の指定だけはできません。現在の値を変更するためには、後述の削除後に再作成を行いましょう。

削除

DROP SEQUENCE 順序名;

まとめ

一意の整数を生成するときに便利なオブジェクトであるシーケンス(順序)についてみてきました。

同時に動くセッション間で一意の値を生成するのは、非常に難しいです。そのようなケースで非常に有用ですよ。

関連


タイトルとURLをコピーしました