ヘッダーをスキップ
Oracle® Database SQL言語リファレンス
12cリリース1 (12.1)
B71278-02
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

CREATE SEQUENCE

用途

CREATE SEQUENCE文を使用すると、順序を作成できます。順序とは、複数のユーザーが一意の整数を生成するときに使用できるデータベース・オブジェクトです。順序を使用すると、主キー値を自動的に生成できます。

順序番号が生成されると、順序はトランザクションのコミットやロールバックとは無関係に増加していきます。2人のユーザーが、同時に同一の順序を増加させると、ユーザーがそれぞれ順序番号を生成しているため、取得する順序番号間に違いが発生することもあります。他のユーザーが生成した順序番号は取得できません。あるユーザーが順序値を生成すると、他のユーザーがその順序を増加させたかどうかに関係なく、順序を生成したユーザーは引き続きその値にアクセスできます。

順序番号は表とは関係なく生成されるため、1つ以上の表に対して同一の順序を使用できます。順序番号が生成および使用されるトランザクションが最終的にロールバックされた場合、個々の順序番号が連続していないように見える場合があります。また、他のユーザーが同一順序を使用していることを個々のユーザーが認識しない場合もあります。

順序が作成されると、SQL文の中でCURRVAL疑似列を使用してその値にアクセスできます(この場合、その順序の現在の値が戻ります)。また、NEXTVAL疑似列を使用してもアクセスできます(この場合は、順序が増加され、新しい値が戻ります)。

順序を遅延セグメントと使用する場合の注意事項: 遅延セグメント作成を使用する表に順序値を挿入しようとすると、順序が戻す最初の値がスキップされます。


関連項目:


前提条件

自分のスキーマ内に順序を作成する場合は、CREATE SEQUENCEシステム権限が必要です。

他のユーザーのスキーマ内に順序を作成する場合は、CREATE ANY SEQUENCEシステム権限が必要です。

構文

create_sequence::=

create_sequence.gifの説明が続きます。
create_sequence.gifの説明

セマンティクス

schema

順序を含めるスキーマを指定します。schemaを省略した場合、自分のスキーマ内に順序が作成されます。

sequence

作成する順序の名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。

次の句のうちどれも指定しない場合は、1から始まる昇順の順序が作成され、上限なしで1ずつ増加していきます。INCREMENT BYに-1のみを指定した場合は、初期値を-1として、下限なしで1つずつ減少していきます。

  • 昇順で、無制限に増加する順序を作成する場合は、MAXVALUEパラメータを省略するか、またはNOMAXVALUEを指定します。降順の場合は、MINVALUEパラメータを省略するか、またはNOMINVALUEを指定します。

  • 昇順で、事前に定義した制限で停止する順序を作成する場合は、MAXVALUEパラメータに値を指定します。降順の場合は、MINVALUEパラメータの値を指定します。NOCYCLEも指定します。順序が制限に達したときに順序番号をさらに生成しようとした場合、エラーが発生します。

  • 事前に定義した制限に達した後で初期値に戻る順序を作成する場合は、MAXVALUEパラメータとMINVALUEパラメータの両方に値を指定します。CYCLEも指定します。

INCREMENT BY 順序の番号間の増分間隔を指定します。この値は、0(ゼロ)以外の正の整数または負の整数になります。この値には、昇順の場合は28桁以内、降順の場合は27桁以内の値を指定できます。この値の絶対値は、MAXVALUEMINVALUEの差未満である必要があります。この値が負の場合、順序は降順になります。この値が正の場合、順序は昇順になります。この句を省略した場合、デフォルトで増分間隔は1に設定されます。

START WITH  生成する順序番号の初期値を指定します。この句を指定した場合、順序の最小値より大きい値を初期値として昇順を開始することも、最大値よりも小さい値を初期値として降順を開始することもできます。昇順の場合、デフォルト値は順序の最小値になります。降順の場合、デフォルト値は順序の最大値になります。正の値の場合は28桁以内、負の値の場合は27桁以内の値を指定できます。


注意:

この値は、必ずしも、順序の最大値または最小値にそれぞれ達した後に、昇順または降順で循環する順序が戻るときの値ではありません。

MAXVALUE 順序の最大値を指定します。正の値の場合は28桁以内、負の値の場合は27桁以内の値を指定できます。MAXVALUE値は、START WITH以上で、かつMINVALUEを超える値である必要があります。

NOMAXVALUE  NOMAXVALUEを指定すると、順序の最大値を、昇順の場合は1028-1、降順の場合は-1に指定できます。これはデフォルトです。

MINVALUE 順序の最小値を指定します。正の値の場合は28桁以内、負の値の場合は27桁以内の値を指定できます。MINVALUE値は、START WITH以下で、かつMAXVALUE未満である必要があります。

NOMINVALUE  NOMINVALUEを指定すると、順序の最小値を、昇順の場合は1、降順の場合は-(1027-1)に指定できます。これはデフォルトです。

CYCLE  CYCLEを指定すると、順序が最大値または最小値に達しても、引き続き値を生成できます。つまり、昇順の場合は、最大値に達すると最小値が生成されます。降順の場合は、最小値に達すると最大値が生成されます。

NOCYCLE  NOCYCLEを指定すると、順序が最大値または最小値に達した場合は、それ以上値を生成しないように指定できます。これはデフォルトです。

CACHE より高速に順序番号にアクセスできるように、メモリー上に事前に割り当て、保持しておく順序番号の数を指定します。28桁以内の整数値を指定できます。このパラメータの最小値は2です。循環する順序の場合、この値は、そのサイクル内で生成される値の数未満である必要があります。指定したサイクル内で生成される順序番号の数を超える値はキャッシュできません。したがって、CACHEに指定できる値の最大値は、次の式で求められる値未満である必要があります。

(CEIL (MAXVALUE - MINVALUE)) / ABS (INCREMENT)

システム障害が発生すると、キャッシュされた順序の値のうち、コミットされたDML文で使用されていなかったものはすべて失われます。したがって、失われる可能性がある値の数は、CACHEパラメータの値と等しくなります。


注意:

Oracle Real Application Clusters環境で順序を使用する場合は、パフォーマンスを向上するために、CACHEの設定を使用することをお薦めします。

NOCACHE NOCACHEを指定すると、順序の値を事前に割り当てないように指定できます。CACHEおよびNOCACHEの両方を省略した場合、デフォルトで20の順序番号がキャッシュされます。

ORDER ORDERを指定すると、要求どおりの順序で順序番号を生成することを保証できます。順序番号をタイムスタンプとして使用する場合に、この句は有効です。通常、主キー生成用の順序については、順序どおりに生成するかどうかの保証は重要ではありません。

Oracle Real Application Clustersを使用する場合、ORDERは順序どおりの生成を確保する場合にのみ必要です。排他モードの場合、順序番号は必ず順序どおりに生成されます。

NOORDER  NOORDERを指定すると、要求どおりの順で順序番号を生成することは保証されません。これはデフォルトです。

KEEP アプリケーション・コンティニュイティのための再実行中に、NEXTVALが元の値を保持するようにするには、KEEPを指定します。この動作は、アプリケーションを実行しているユーザーが、順序を含むスキーマの所有者である場合にのみ行われます。この句は、リカバリ可能なエラー後の再実行でバインド変数の一貫性を保持するために役立ちます。アプリケーション・コンティニュイティの詳細は、『Oracle Database開発ガイド』を参照してください。

NOKEEP アプリケーション・コンティニュイティのための再実行中に、NEXTVALが元の値を保持しないようにするには、NOKEEPを指定します。これはデフォルトです。


注意:

KEEP句とNOKEEP句は、順序を含むスキーマの所有者にのみ適用されます。アプリケーション・コンティニュイティのための再実行中に、その他のユーザーの元の値をNEXTVALで維持するかどうかは、順序に対するKEEP SEQUENCEオブジェクト権限を付与または取消しすることで制御できます。KEEP SEQUENCEオブジェクト権限の詳細は、「表18-2」を参照してください。

SESSION SESSIONを指定すると、セッションの順序を作成できます。この順序は、セッションから認識できるグローバル一時表に使用することを具体的に指定する特種な順序です。既存の通常の順序(対比のために「グローバルな」順序と呼びます)とは異なり、セッションの順序は、複数のセッション全体ではなく、1つのセッションに限定された順序番号の一意の範囲を返します。また、セッションの順序は永続されない点も異なります。セッションが失われると、そのセッション中にアクセスされるセッションの順序も失われます。

セッションの順序は、読取り/書込みデータベースで作成する必要がありますが、読取り/書込みデータベースまたは読取り専用の任意のデータベース(一時的に読取り専用でオープンされた通常のデータベース、またはスタンバイ・データベース)からアクセスできます。

CACHE句、NOCACHE句、ORDER句、またはNOORDER句は、SESSION句と同時に指定すると無視されます。


関連項目:

セッション順序の詳細は、『Oracle Data Guard概要および管理』を参照してください。

GLOBAL GLOBALを指定すると、グローバルな順序(つまり、通常の順序)を作成できます。これはデフォルトです。

順序の作成例: 次の文は、サンプル・スキーマoeに順序customers_seqを作成します。この順序は、customers表に行が追加されるときに、顧客ID番号として使用できます。

CREATE SEQUENCE customers_seq
 START WITH     1000
 INCREMENT BY   1
 NOCACHE
 NOCYCLE;

最初にcustomers_seq.nextvalを参照したときは、1000が戻されます。次に参照したときは、1001が戻されます。同様に、この後の各参照で、前回参照された値より1大きい値が戻されます。