日本語PDF

CREATE SEQUENCE

目的

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

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

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

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

関連項目:

前提条件

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

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

構文

create_sequence::=

セマンティクス

schema

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

sequence

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

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

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

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

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

SHARING

この句は、アプリケーション・ルートに順序を作成する場合にのみ適用されます。このタイプの順序はアプリケーション共通オブジェクトと呼ばれ、アプリケーション・ルートに属するアプリケーションPDBと共有できます。順序の共有方法を決定するには、次の共有属性のいずれかを指定します。

  • METADATA - メタデータ・リンクは順序のメタデータを共有しますが、そのデータは各コンテナに固有です。このタイプの順序は、メタデータリンク・アプリケーション共通オブジェクトと呼ばれます。

  • DATA - データ・リンクは順序を共有し、そのデータはアプリケーション・コンテナ内のすべてのコンテナに対して同じです。そのデータはアプリケーション・ルートにのみ格納されます。このタイプの順序は、データリンク・アプリケーション共通オブジェクトと呼ばれます。

  • NONE - 順序は共有されません。

この句を省略した場合、データベースはDEFAULT_SHARING初期化パラメータの値を使用して、順序の共有属性を決定します。DEFAULT_SHARING初期化パラメータに値が含まれていない場合、デフォルトはMETADATAです。

順序を作成した後、その共有属性を変更することはできません。

関連項目:

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

NOORDER

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

KEEP

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

NOKEEP

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

ノート:

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

SCALE

順序の拡張性を有効にするには、SCALEを使用します。SCALEが指定されている場合、数値オフセットが順序の先頭に付加され、生成された値からすべての重複が削除されます。

EXTEND

EXTENDSCALEとともに指定すると、生成される順序値は全長(x+y)になります。ここで、xは拡張可能なオフセット(デフォルト値は6)、yは順序内の数字の最大数(maxvalue/minvalue)です。

SCALEを使用する場合は、順序に対してORDERを同時に使用しないことをお薦めします。

NOEXTEND

NOEXTENDは、SCALE句のデフォルト設定です。NOEXTENDが設定されていると、生成される順序値の幅は最大でも順序内の数字の最大数(maxvalue/minvalue)です。この設定は、固定幅の列を移入するために順序が使用される、既存のアプリケーションとの統合に役立ちます。

NOSCALE

順序の拡張性を無効にするには、NOSCALEを使用します。

SHARD

SHARD句のセマンティクスの詳細は、ALTER SEQUENCE文のSHARD句を参照してください。

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大きい値が戻されます。