用途
CREATE
SEQUENCE
文を使用すると、順序を作成できます。順序とは、複数のユーザーが一意の整数を生成するときに使用できるデータベース・オブジェクトです。順序を使用すると、主キー値を自動的に生成できます。
順序番号が生成されると、順序はトランザクションのコミットやロールバックとは無関係に増加していきます。2人のユーザーが、同時に同一の順序を増加させると、ユーザーがそれぞれ順序番号を生成しているため、取得する順序番号間に違いが発生することもあります。他のユーザーが生成した順序番号は取得できません。あるユーザーが順序値を生成すると、他のユーザーがその順序を増加させたかどうかに関係なく、順序を生成したユーザーは引き続きその値にアクセスできます。
順序番号は表とは関係なく生成されるため、1つ以上の表に対して同一の順序を使用できます。順序番号が生成および使用されるトランザクションが最終的にロールバックされた場合、個々の順序番号が連続していないように見える場合があります。また、他のユーザーが同一順序を使用していることを個々のユーザーが認識しない場合もあります。
順序が作成されると、SQL文の中でCURRVAL
疑似列を使用してその値にアクセスできます(この場合、その順序の現在の値が戻ります)。また、NEXTVAL
疑似列を使用してもアクセスできます(この場合は、順序が増加され、新しい値が戻ります)。
順序を遅延セグメントと使用する場合の注意事項: 遅延セグメント作成を使用する表に順序値を挿入しようとすると、順序が戻す最初の値がスキップされます。
関連項目:
|
前提条件
自分のスキーマ内に順序を作成する場合は、CREATE
SEQUENCE
システム権限が必要です。
他のユーザーのスキーマ内に順序を作成する場合は、CREATE
ANY
SEQUENCE
システム権限が必要です。
セマンティクス
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桁以内の値を指定できます。この値の絶対値は、MAXVALUE
とMINVALUE
の差未満である必要があります。この値が負の場合、順序は降順になります。この値が正の場合、順序は昇順になります。この句を省略した場合、デフォルトで増分間隔は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概要および管理』を参照してください。 |