CREATE SEQUENCE

CREATE SEQUENCE文は、この後、複数のユーザーが一意の整数を生成するために使用できる新しい順序番号ジェネレータを作成します。CREATE SEQUENCE文を使用して、順序の初期値を定義し、増分値、最大値または最小値を定義し、最小または最大に達した後も順序番号を生成し続けるかどうかを決定します。

必要な権限

CREATE SEQUENCE(所有者の場合)またはCREATE ANY SEQUENCE(非所有者の場合)。

TimesTen Scaleoutでの使用

この文は、TimesTen Scaleoutでサポートされています。BATCH句は、TimesTen Scaleoutのみでサポートされています。

SQL構文

CREATE SEQUENCE [Owner.]SequenceName
       [INCREMENT BY IncrementValue]
       [MINVALUE MinimumValue]
       [MAXVALUE MaximumValue]
       [CYCLE]
       [CACHE CacheValue]
       [START WITH StartValue]
       [BATCH BatchValue]

パラメータ

パラメータ 説明

SEQUENCE [Owner.]SequenceName

順序番号ジェネレータの名前です。

INCREMENT BY IncrementValue

連続する数値の増分値です。この値は正または負の整数値です。0は指定できません。値が正の場合は昇順になります。負の場合は降順になります。デフォルト値は1です。降順では、範囲はMAXVALUEからMINVALUEへ変化し、昇順ではその逆になります。

MINVALUE MinimumValue

順序の最小値を指定します。デフォルトの最小値は1です。

MAXVALUE MaximumValue

昇順の場合は最大値、降順の場合は開始値です。デフォルトの最大値は(263) -1であり、これはBIGINTの最大です。

CYCLE

順序番号ジェネレータが最大値または最小値に達した後、数値の生成を続行するかどうかを指定します。デフォルトでは、順序はサイクルしません。昇順で数値が最大値に達すると、順序は始めに戻り、最小値から値を生成し続けます。降順で最小値に達すると、順序値は最大値に戻ります。CYCLEが指定されていない場合、最大/最小値に達すると順序番号ジェネレータは値の生成を停止し、エラーが返されます。

CACHE CacheValue

CACHEは毎回キャッシュを行うタイミングとなる数値の範囲を示します。再起動すると、キャッシュされた未使用の値は失われます。CacheValueに1を指定した場合、順序を使用するたびにデータベースに対して更新が発生します。キャッシュ値が大きいほど、データベースへの変更およびオーバーヘッドは少なくなります。デフォルトは20です。

START WITH StartValue

生成する最初の順序番号を指定します。この句を使用して、その最小値よりも大きい値から昇順順序を開始、あるいはその最大値よりも小さい値から降順順序を開始します。StartValueMinimumValue以上になる必要があります。また、StartValueMaximumValue以下になる必要があります。

BATCH BatchValue

TimesTen Scaleoutのみで有効です。グリッドの各要素に格納される一意の順序値の範囲を構成します。デフォルト値は1000万です。

説明

  • CREATE SEQUENCE文のすべてのパラメータは整数値である必要があります。

  • パラメータに値を指定しない場合、TimesTenでは、1から開始し、1ずつ増加し、デフォルトの最大値を持ちサイクルしない昇順がデフォルトで作成されます。

  • ビューまたはマテリアライズド・ビューと同じ名前の順序は作成しないでください。

  • CYCLE属性による順序はレプリケートできません(TimesTen Classic)。

  • アクティブ・スタンバイ・ペアのレプリケートされた環境があるTimesTen Classicで、DDL_REPLICATION_LEVELが3以上の場合にアクティブ・データベースでCREATE SEQUENCEを実行すると、順序はレプリケーション・スキームのすべてのデータベースにレプリケートされます。順序をレプリケーション・スキームに含めるには、DDL_REPLICATION_ACTIONINCLUDEに設定します。詳細は、『Oracle TimesTen In-Memory Databaseレプリケーション・ガイド』「アクティブ・スタンバイ・ペアでのDDL変更」を参照してください。

TimesTen Scaleoutでの使用

  • CREATE SEQUENCE文では、グローバル・オブジェクトが作成されます。順序を作成した後、順序値がデータベースのいずれかの要素から取得されます。

  • 順序値は一意ですが、この値は要素をまたいで単調な順番では返されない可能性があります。1つの要素内では、順序値の順番は単調です。ただし、時間の経過に伴い、要素をまたいでは順序値は単調に返されません。ただし、1つの要素内ではプロパティが単調になることが保証されます。

  • バッチ値は、要素に格納された一意の順序値の範囲です。各要素に独自のバッチがあります。ローカル・バッチが消費されると、要素は新しいバッチを取得します。順序を所有し、バッチ順序ブロックを他の要素に割り当てる1つの要素があります。

  • BATCH句の場合:

    • この句を使用して、グリッドの各要素に格納される順序値の範囲を指定します。

    • デフォルトは1000万です。

    • BatchValueCacheValue以上になる必要があります。

    • BatchValueの最大値は、プラットフォームの符号付き整数の最大値に依存します。

  • レプリカ・セット内の各要素には独自のバッチがあります。

  • 要素のバッチ順序値はリカバリ可能です。キャッシュ値はリカバリできません。

詳細および例は、『Oracle TimesTen In-Memory Database Scaleoutユーザーズ・ガイド』「順序の使用方法」を参照してください。

TimesTen ScaleoutでのCURRVALおよびNEXTVALの使用方法

SQL文でSEQUENCE値を参照するには、CURRVALNEXTVALを使用します。

  • CURRVALは、現在のセッションでNEXTVALがコールされていればその最新の値を返し、コールされていなければエラーを返します。

  • NEXTVALは、指定された増分で順序の現在値を増加させ、アクセスされた行ごとに値を返します。

複数のNEXTVAL参照を持つ1つのSQL文を実行する場合、TimesTenでは順序を一度だけ増加させ、すべてのNEXTVALに対して同じ値が返されます。SQL文にNEXTVALCURRVALの両方が含まれている場合は、NEXTVALが最初に実行されます。CURRVALNEXTVALは、そのSQL文では同じ値を持ちます。

NEXTVALおよびCURRVALは、次の場合に使用できます。

グリッドでのCURRVALおよびNEXTVALの使用方法の詳細および例は、『Oracle TimesTen In-Memory Database Scaleoutユーザーズ・ガイド』「順序の使用方法」を参照してください。

TimesTen ClassicでのCURRVALおよびNEXTVALの使用方法

SQL文でSEQUENCE値を参照するには、CURRVALNEXTVALを使用します。

  • CURRVALは、現在のセッションでNEXTVALがコールされていればその最新の値を返し、コールされていなければエラーを返します。

  • NEXTVALは、指定された増分で順序の現在値を増加させ、アクセスされた行ごとに値を返します。

順序の現在値は、接続ごとに異なります。同じデータベースに2つの同時接続がある場合、各接続は同じ順序について、最後のNEXTVAL参照により設定された独自のCURRVALを取得します。最大値に達した場合、CREATE SEQUENCECYCLEオプションの値によって、SEQUENCEはサイクルする(開始値に戻る)か、エラー文を生成します。リカバリでは、順序はロールバックされません。順序の値の範囲に幅を持たせることができますが、その場合でも各順序値は一意です。

複数のNEXTVAL参照を持つ1つのSQL文を実行する場合、TimesTenでは順序を一度だけ増加させ、すべてのNEXTVALに対して同じ値が返されます。SQL文にNEXTVALCURRVALの両方が含まれている場合は、NEXTVALが最初に実行されます。CURRVALNEXTVALは、そのSQL文では同じ値を持ちます。

ノート:

NEXTVALは、アクティブ・スタンバイ・ペアのスタンバイ・ノードへの問合せでは使用できません。

NEXTVALおよびCURRVALは、次の場合に使用できます。

例: TimesTen Scaleout

詳細な例は、『Oracle TimesTen In-Memory Database Scaleoutユーザーズ・ガイド』「順序の使用方法」を参照してください。

構文の例:

Command> CREATE SEQUENCE mysequence BATCH 100;
Command> describe mysequence;
 
Sequence SAMPLEUSER.MYSEQUENCE:
  Minimum Value: 1
  Maximum Value: 9223372036854775807
  Current Value: 1
  Increment:     1
  Cache:         20
  Cycle:         Off
  Batch:         100
 
1 sequence found.

例: TimesTen Classic

順序を作成します。

CREATE SEQUENCE mysequence INCREMENT BY 1 MINVALUE 2 
       MAXVALUE 1000;

この例では、tab1は表内に1行のデータを持ち、CYCLEが使用されているとします。

CREATE SEQUENCE s1 MINVALUE 2 MAXVALUE 4 CYCLE;
SELECT s1.NEXTVAL FROM tab1;
/* Returns the value of 2; */
SELECT s1.NEXTVAL FROM tab1;
/* Returns the value of 3; */
SELECT s1.NEXTVAL FROM tab1;
/* Returns the value of 4; */

最大値に達した後、最小値から昇順でサイクルを開始します。

SELECT s1.NEXTVAL FROM tab1;
/* Returns the value of 2; */

順序を作成して順序番号を生成するには、次の文を使用します。

CREATE SEQUENCE seq INCREMENT BY 1;
INSERT INTO student VALUES (seq.NEXTVAL, 'Sally');

UPDATE SET句で順序を使用するには、次の文を使用します。

UPDATE student SET studentno = seq.NEXTVAL WHERE name = 'Sally';

問合せで順序を使用するには、次の文を使用します。

SELECT seq.CURRVAL FROM student;