説明
このステートメントは、シーケンスを作成するために使用されます。シーケンスはデータベースオブジェクトに属し、ユーザーはシーケンスから一意の整数を生成できます。
2人のユーザーが同時に同一のシーケンスをインクリメントすると、各ユーザーが取得するシーケンス番号には間隔が生じる可能性があり、あるユーザーは他のユーザーが生成したシーケンス番号を決して取得できない場合があります。シーケンス番号はテーブルとは独立して生成されるため、1つまたは複数のテーブルで同じシーケンスを使用できます。
シーケンスを作成した後、SQLステートメント内でCURRVAL擬似列を使用してシーケンスの現在値を返すか、NEXTVAL擬似列を使用して次の値を返すことができます。詳細については、シーケンスの擬似列を参照してください。
構文
CREATE SEQUENCE [ schema. ] sequence_name
{ START WITH int_value
|[ INCREMENT BY int_value ]
|[ MINVALUE int_value | NOMINVALUE ]
|[ MAXVALUE int_value | NOMAXVALUE ]
|[ CACHE int_value | NOCACHE ]
|[ ORDER | NOORDER ]
|[ CYCLE | NOCYCLE ]
}
;
パラメータの説明
| フィールド | 説明 |
|---|---|
| schema. | シーケンスを含むスキーマを指定します。Schemaが省略された場合、データベースはユーザーが現在属しているスキーマ内にシーケンスを作成します。 |
| sequence_name | 作成するシーケンスの名前。 |
| MINVALUE int_value | シーケンスの最小値を指定します。int_value の値の範囲は [-9223372036854775808,9223372036854775807] です。 |
| NOMINVALUE | NOMINVALUE がデフォルト値です。NOMINVALUE を指定した場合、昇順時の最小値は1、降順時の最小値は -9223372036854775808 になります。 |
| MAXVALUE int_value | シーケンスの最大値を指定します。int_value の値の範囲は [-9223372036854775808,9223372036854775807] です。注記
|
| NOMAXVALUE | NOMAXVALUE がデフォルト値です。NOMAXVALUE を指定した場合、昇順時の最大値は9223372036854775807、降順時の最大値は -1 になります。 |
| START WITH int_value | シーケンスの開始値を指定します。int_value は MAXVALUE 以下かつ MINVALUE 以上でなければなりません。指定しない場合、昇順時のデフォルト値は最小値、降順時のデフォルト値は最大値となります。 |
| INCREMENT BY int_value | シーケンスの自動インクリメント幅を指定します。int_value は0にすることはできません。正の数を指定した場合、シーケンスは昇順になります。負の数を指定した場合、シーケンスは降順になります。指定しない場合、デフォルト値は1です。 |
| CACHE int_value | メモリ内に事前に割り当てる自動インクリメント値の個数を指定します。int_value のデフォルト値は20です。CACHE int_value の値は1より大きくなければなりません。CACHE INT_VALUE の値が1の場合、NOCACHE と同じ意味になります。 |
| NOCACHE | 指定されたシーケンスの値は事前に割り当てられていないことを示します。CACHE と NOCACHE の両方が省略された場合、データベースはデフォルトで20個のシリアル番号をキャッシュします。 |
| ORDER | 指定されたシーケンスの値は順序に従って生成されます。 |
| NOORDER | NOORDER はデフォルト値であり、シーケンスの値が順序に従って生成されることを保証しません。 |
| CYCLE | シーケンスの値をループ生成するように指定します。つまり、シーケンスが最大値または最小値に達した後も引き続き値を生成します。昇順で最大値に達した後は最小値を生成し、降順シーケンスが最小値に達した後は最大値を生成します。 注記
|
| NOCYCLE | NOCYCLE はデフォルト値であり、シーケンスが最大値または最小値に達した後、これ以上値を生成できないように指定します。 |
例
Schema test 内にシーケンス seq1 を作成し、自動インクリメントのステップサイズを2と指定します。以下の例では、seq1.nextval の最初の参照は1を返し、2番目の参照は3を返します。その後の各参照の戻り値は、それぞれ前の値よりも2大きくなります。
obclient> CREATE SEQUENCE test.seq1 START WITH 1 MINVALUE 1 MAXVALUE 10 INCREMENT BY 2 NOCYCLE NOORDER CACHE 30;
Query OK, 0 rows affected
obclient> SELECT seq1.nextval FROM DUAL;
+--------+
| nextval|
+--------+
| 1 |
+--------+
1 row in set
obclient> SELECT seq1.nextval FROM DUAL;
+--------+
| nextval|
+--------+
| 3 |
+--------+
1 row in set