説明
このステートメントは、シーケンスを作成するために使用されます。シーケンスはデータベースオブジェクトに属し、ユーザーはシーケンスから一意の整数を生成できます。
2人のユーザーが同時に同一のシーケンスをインクリメントすると、各ユーザーが取得するシーケンス番号には間隔が生じる可能性があり、あるユーザーは他のユーザーが生成したシーケンス番号を決して取得できない場合があります。シーケンス番号はテーブルとは独立して生成されるため、1つまたは複数のテーブルで同じシーケンスを使用できます。
シーケンスを作成した後、SQLステートメント内でCURRVAL疑似列を使用してシーケンスの現在値を返すか、NEXTVAL疑似列を使用して次の新しい値を返すことができます。詳細については、シーケンス疑似列を参照してください。
構文
CREATE SEQUENCE [ IF NOT EXISTS ] [ 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 | 作成するシーケンス名。 |
| IF NOT EXISTS | 作成するシーケンス名が既に存在し、IF NOT EXISTS が指定されていない場合、エラーが報告されます。 |
| MINVALUE int_value | シーケンスの最小値を指定します。int_value の値の範囲は [-(1027-1) ~ (1027-1)] です。 |
| NOMINVALUE | NOMINVALUE がデフォルト値です。NOMINVALUE を指定した場合、昇順時の最小値は1、降順時の最小値は -(1027-1) となります。 |
| MAXVALUE int_value | シーケンスの最大値を指定します。int_value の値の範囲は [(-1027+1) ~ (1028-1)] です。注記
|
| NOMAXVALUE | NOMAXVALUE がデフォルト値です。NOMAXVALUE を指定した場合、昇順時の最大値は(1028-1)、降順時の最大値は -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 がデフォルト値であり、シーケンスが最大値または最小値に達した後、それ以上値を生成できないように指定します。 |
例
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