create sequence - 新しいシーケンスを作ります
create sequence seqname
[increment incby_value]
[minvalue min_value]
[maxvalue max_value]
[start start_value]
[cache cache_value]
[cycle]
create sequence は新しいシーケンスを現在のデータベースに入れます。実際には単一ブロックのseqnameという名前の 表 をを新しく作って初期化します。シーケンスはコマンドを発行したユーザの "所有" になります。
increment はオプションの句です。正の値は正順のシーケンス、負の値は逆順のシーケンスになります。デフォルトの値は 1です。
オプションの整数 minvalue はシーケンスの取る最小値を決定します。デフォルトは正順のシーケンスが 1、逆順が -2147483647です。
オプションの整数 maxvalue はシーケンスの最大値を決定します。デフォルトは正順のシーケンスが 2147483647、逆順が -1です。
オプションの start 値はシーケンスがどこから始まるかを決めます。デフォルトでは正順のシーケンスが minvalue で、逆順が maxvalue となります。
cache オプションは連続番号が先にアロケートされてメモリに保存されて、高速アクセスが可能となります。最小値は 1 (つまりキャッシュしません)で、これがデフォルトとなります。 注意: 各バックエンドはそれぞれにアロケートした数をキャッシュします。現在のセッションでキャッシュされても使われなかった数は捨てられます。
オプションの cycle キーワードは正順/逆順のシーケンスが maxvalue/minvalue に達した時に、そのまま続けることを可能にします。もしリミットに達すると、次に発生する数は minvalue/maxvalue になります。
シーケンスが作られると、関数 nextval にシーケンス名を引数に付けて、指定したシーケンスから新しい数を得るように使うことができます。関数 currval ('シーケンス名')を使うことで指定したシーケンスが現在のセッションで最後の nextval の呼び出しに戻した数を見ることができます。
シーケンスのパラメータを得る問い合わせは
select * from <sequence_name>;
のようになります。
シーケンスへの複数の同時の呼び出しを可能とするために、低レベルのロックが使われます。
--
-- 2つの数をキャッシュして 10から始まる seq というシーケンスを作ります
--
create sequence seq cache 2 start 10;
--
-- シーケンスから次の番号を選択します
--
select nextval ('seq');
--
-- 挿入にシーケンスを使います。
--
insert into table _table_ values (nextval ('seq'),...);