本ページでは、新しいシーケンスジェネレータを定義する方法について説明します。
構文
CREATE SEQUENCE name [ INCREMENT BY increment ]
[ { NOMINVALUE | MINVALUE minvalue } ]
[ { NOMAXVALUE | MAXVALUE maxvalue } ]
[ START WITH start ] [ CACHE cache | NOCACHE ] [ CYCLE ]
パラメーター
パラメーター | 説明 |
---|---|
name | 作成するシーケンスの名前 (オプションでスキーマ修飾) 。 |
increment | オプションの INCREMENT BY increment 句は、新しい値を作成するために現在のシーケンス値に追加する値を指定します。 正の値は昇順のシーケンスになり、負の値は降順のシーケンスになります。 デフォルト値は
1 です。
|
NOMINVALUE | MINVALUE minvalue | オプションの MINVALUE minvalue 句は、シーケンスが生成できる最小値を決定します。 この句が指定されていない場合、デフォルト値が使用されます。 デフォルト値は 1 および -2
63
-1 で、それぞれ昇順と降順です。 キーワード NOMINVALUE はこの動作をデフォルトに設定するために使用できることに留意してください。
|
NOMAXVALUE | MAXVALUE maxvalue | オプションの MAXVALUE maxvalue 句は、シーケンスの最大値を決定します。 この句が指定されていない場合、デフォルト値が使用されます。 デフォルト値は、2
63
-1 および 1 で、それぞれ昇順用と降順用です。 キーワード NOMAXVALUE はこの動作をデフォルトに設定するために使用できることに留意してください。
|
start | オプションの START WITH start 句は、シーケンスをどこからでも開始することができます。 デフォルトの開始値は、昇順の場合は minvalue 、降順の場合は maxvalue です。
|
cache | オプションの CACHE cache 句は、アクセスを高速化するために、事前に割り当ててメモリに格納するシーケンス番号の数を指定します。 最小値は 1 (NOCACHE など、一度に 1 つの値しか生成できない)
であり、これもデフォルトです。
|
CYCLE | CYCLE オプションを使用すると、昇順または降順でそれぞれ maxvalue または minvalue に達したときにシーケンスを折り返すことができます。 制限に達した場合、次に生成される数はそれぞれ minvalue または maxvalue になります。 デフォルト値 CYCLE を省略した場合、シーケンスが maxvalue に達した後に NEXTVAL を呼び出すと、エラーが返されます。 キーワード NO CYCLE を使用してデフォルトの動作を取得できますが、このキーワードは Oracle データベースとの互換性がないことにご注意ください。 |
説明
CREATE SEQUENCE 文は、新しいシーケンスジェネレーターを定義するために使用されます。 これには、name パラメーターを使用して新しい特別な単一行テーブルを作成および初期化することが含まれます。 ジェネレータは、ステートメントを発行するユーザーが所有します。
スキーマ名が指定されている場合、シーケンスは指定されたスキーマで作成されます。指定されていない場合、現在のスキーマで作成されます。 シーケンス名は、同じスキーマ内の他のシーケンス、テーブル、インデックス、またはビューの名前とは異なる必要があります。
シーケンスは大きな整数演算に基づいているため、範囲は 8 バイト整数の範囲 (-9223372036854775808〜9223372036854775807) を超えることはできません。 以前の一部のプラットフォームでは、コンパイラが 8 バイト整数をサポートしていない場合があり、その場合、シーケンスは通常の INTEGER 演算 (範囲は -2147483648 〜 +2147483647) を使用します。
複数のセッションで同時に使用されるシーケンスオブジェクトに 1 より大きいキャッシュ設定を使用すると、予期しない結果が得られる可能性があります。 複数のセッションで同時に使用されるシーケンスオブジェクトに 1 より大きいキャッシュ設定を使用すると、予期しない結果が得られる可能性があります。 次に、そのセッション内での次の cache-1 の NEXTVAL の使用は、シーケンスオブジェクトを操作せずに、事前に割り当てられた値を返すだけです。 そのため、セッション内で割り当てられたが使用されなかった番号は、そのセッションが終了すると失われ、シーケンスに「穴」ができます。
さらに、複数のセッションが個別のシーケンス値を割り当てることが保証されていますが、すべてのセッションが考慮されると、値がシーケンスから生成される場合があります。 たとえば、キャッシュ設定が 10 の場合、セッション A は値 1〜10 を予約して NEXTVAL = 1 を返し、セッション B は値 11〜20 を予約して NEXTVAL = 11 を返した後、セッション A が NEXTVAL = 2 を生成します。 したがって、キャッシュ設定が 1 の場合、 NEXTVAL 値が順次生成されると想定しても安全です。 キャッシュ設定が 1 より大きい場合は、 NEXTVAL 値がすべて別個であると想定するだけであり、純粋に順次に生成されるとは限りません。 また、最後の値は、NEXTVAL によって返されたかどうかに関係なく、セッションによって予約された最新の値を反映します。
例
101 から始まる、serial と呼ばれる昇順のシーケンスを作成します。
CREATE SEQUENCE serial START WITH 101;
このシーケンスから次の番号を選択します。
SELECT serial.NEXTVAL FROM DUAL;
nextval
---------
101
(1 row)
NOCACHE オプションを指定して、supplier_seq というシーケンスを作成します。
CREATE SEQUENCE supplier_seq
MINVALUE 1
START WITH 1
INCREMENT BY 1
NOCACHE;
このシーケンスから次の番号を選択します。
SELECT supplier_seq.NEXTVAL FROM DUAL;
nextval
---------
1
(1 row)