説明
このステートメントは、シーケンスを作成するために使用します。シーケンスはデータベースオブジェクトの一種であり、ユーザーはシーケンスから一意の整数を生成できます。
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