2017/12/07
例えば、一意で通しの伝票番号を自動で採番したいなど、そういった場合に便利なのが、シーケンス(順序)です。
本記事では、ORACLEのシーケンスの作成や削除の方法について、まとめました。
ちなみに、シーケンスの使用方法については、こちらの記事を参照ください。
sponsored link
シーケンス(順序)とは
シーケンス(順序)とは、一意の整数を生成するときに使用できるオブジェクトです。
大きな利点は、同時に接続される複数のセッション間でも、一意の値を容易に生成できる点です。これは、コミットやロールバックに影響せずに、順序から整数を取得した段階で、順序がカウントアップ(またはカウントダウン)されるためです。
例えば、受注テーブルの主キーである伝票番号を一意に採番したい場合に、使用します。
文法
作成
1 2 3 4 5 6 7 8 9 |
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)の例です。
1 2 3 4 5 6 7 8 |
CREATE SEQUENCE test_seq1 INCREMENT BY 1 -- 省略可 START WITH 1 -- 省略可 MAXVALUE 999999 MINVALUE 1 -- 省略可 CYCLE CACHE 20 -- 省略可 ; |
変更
1 2 3 4 5 6 7 8 |
ALTER SEQUENCE 順序名 [INCREMENT BY 増分値] [MAXVALUE 最大値 | NOMAXVALUE] [MINVALUE 最小値 | NOMINVALUE] [CYCLE | NOCYCLE] [CACHE キャッシュ数 | NOCYCLE] [ORDER | NOORDER] ; |
各オプションは、作成時と同じですが、初期値の指定だけはできません。現在の値を変更するためには、後述の削除後に再作成を行いましょう。
削除
1 |
DROP SEQUENCE 順序名; |
まとめ
一意の整数を生成するときに便利なオブジェクトであるシーケンス(順序)についてみてきました。
同時に動くセッション間で一意の値を生成するのは、非常に難しいです。そのようなケースで非常に有用ですよ。
関連