順序ジェネレータ

順序ジェネレータは、一連の整数を生成するサービスです。表に追加する各IDENTITY列には、独自のシーケンス・ジェネレータ(SG)が必要です。SGは、必要に応じて値を取得したり、IDENTITY列に値を指定したりするなど、いくつかのタスクを担当します。

各IDENTITY列には、関連付けられた専用のシーケンス・ジェネレータ(SG)が必要です。IDENTITY列を追加すると、クライアントで実行されるSGがアプリケーションとともに作成されます。各SGのすべての属性に関する情報が、システム表SYS$SGAttributesTableに追加されます。次のような簡単な問合せを使用して、このシステム表の内容を確認できます。
SELECT * FROM SYS$SGAttributesTable

その他のコマンドの場合:

コマンドの相違点 説明
SHOW TABLES テーブルのリストを返します
DESCRIBE TABLE name1 表name1のスキーマを示します
SELECT * FROM table_name table_nameのデータ行を表示します

構文

sequence_generator_attributes ::=
   (START WITH signed_int) | 
   (INCREMENT BY signed_int) | 
   (MAXVALUE signed_int) | (NO MAXVALUE) | 
   (MINVALUE signed_int) | (NO MINVALUE) | 
   (CACHE INT) | (NO CACHE) | 
   CYCLE | (NO CYCLE) 

セマンティクス

Oracle NoSQL Databaseでは、アイデンティティ列にアタッチされた順序ジェネレータのみがサポートされています。IDENTITY列の使用を参照してください。生成される順序の番号は、順序ジェネレータ属性の属性によって異なります。

次に、IDENTITY列を作成する際にオプションで指定できるSG属性、またはALTER TABLE文を使用して後で変更できるSG属性を示します。

属性 説明
START WITH Integer 順序内の最初の値。ゼロ(0)はStart With値として許可されます。

デフォルト値: 1

INCREMENT BY Integer 順序内の次の値は、順序の現在の値にINCREMENT BY値を追加して生成されます。増分値には正の数または負の数を指定できます。ゼロ(0)は、Increment By値として許可されません。Increment Byに負の数値を指定すると、順序の現在の値から値が減分されます。

デフォルト値: 1

MINVALUE Integer SGが提供するIDENTITY値の下限。MINVALUEまたはNO MINVALUEのいずれかを指定できますが、両方は指定できません。

デフォルト値: -2^31で、INTEGERデータ型の最小値です。

NO MINVALUE Integer SGが提供するIDENTITY値の下限がないことを指定します。SGは、INTEGERデータ型の最小値(-2^31)をIDENTITY値の下限として使用します。MINVALUEまたはNO MINVALUEのいずれかを指定できますが、両方は指定できません。
MAXVALUE Integer SGが提供するIDENTITY値の上限。MAXVALUEまたはNO MAXVALUEのいずれかを指定できますが、両方は指定できません。

デフォルト値: 2^31-1で、INTEGERデータ型の最大値です。

NO MAXVALUE Integer SGが提供するIDENTITY値の上限がないことを指定します。SGは、INTEGERデータ型の最大値(2^31-1)をIDENTITY値の上限として使用します。MAXVALUEまたはNO MAXVALUEのいずれかを指定できますが、両方は指定できません。
CACHE Integer この属性の値は、順序ジェネレータに対してリクエストが行われるたびに生成される順序番号のカウントを指定します。これらのリクエストはOracle NoSQL Databaseクライアントで行われ、サーバーに存在する順序ジェネレータによって処理されます。具体的には、各リクエストで生成された数がクライアントに返信され、そこでキャッシュされます。クライアントがIDENTITY列に値を割り当てる必要がある場合は、常に、キャッシュの次の順序番号が使用されます。キャッシュが空の場合、キャッシュ順序番号の別のバッチのリクエストが順序ジェネレータに送信されます。

複数のクライアントが、このように一意の値について定義されたIDENTITY列を持つ表にアクセスする場合、各クライアントには、連続した値セットがそのSGキャッシュに割り当てられます。これらのセットは、他のクライアント・セットと重複しません。たとえば、Client1には値0001 – 1000、Client2には1001 – 2000、などと割り当てられます。したがって、それぞれのクライアントが表に行を追加すると、IDENTITY値は0001、1001、0002、1002、1003のようになります(どちらのクライアントも、行を追加するときに独自のキャッシュを使用するため)。IDENTITY列の値は、一意であることが保証されていますが、各クライアントに独自のキャッシュ値のセットがあり、異なる速度で異なる時間に行が追加されるため、必ずしも連続しているとはかぎりません。

CACHEまたはNO CACHEのいずれかを指定できますが、両方は指定できません。

デフォルト値: 1000

NO CACHE Integer ローカル・キャッシュがSGで使用されていないことを指定します。CACHEまたはNO CACHEのいずれかを指定できますが、両方は指定できません。
CYCLEまたはNO CYCLE Boolean

IDENTITY列のデータ型の最大値または最小値に達した後、SGが値の生成を続行するかどうかを決定します。昇順の順序が最大値に達した後に、最小値を生成します。降順の順序が最小値に達した後に、最大値を生成します。

CYCLE属性を指定した場合、MAXVALUEを指定して異なる制限を設定しないかぎり、SGは、特定のデータ型(INTEGER、LONGまたはNUMBER)のIDENTITY列に生成される値の合計数を使用します。順序ジェネレータがサイクルの終わりに到達すると、順序ジェネレータを再循環して、前のサイクルで生成された値を生成します。

NO CYCLE属性を指定した場合、Oracle NoSQL Databaseは各IDENTITY列の値が一意であることを保証しますが、必ずしも連続しているとはかぎりません。たとえば、MaxValueを10000に設定し、複数のクライアントが表に行を追加する場合、各クライアントには使用する特定の数の値が割り当てられます。

デフォルト値: NO CYCLE

ノート:

CYCLE属性を指定した場合、IDENTITY列の既存の値がすべて再使用され、現在の値が上書きされる可能性があります。列をGENERATED ALWAYS AS IDENTITYとして作成し、SGのNO CYCLE属性を使用することが、一意のIDENTITY列値を維持する唯一の方法です。

次に内部SG属性を示します。IDENTITY列を作成または追加する場合、これらはいずれも指定できません。それぞれ、IDENTITYフィールドの作成方法から導出されます。たとえば、内部属性の1つにSGNameがあり、これはIDENTITYフィールドに指定する列名です。

属性 説明
SGType 文字列 [INTERNAL | EXTERNAL]。作成するか、DDL文を使用して表に追加するIDENTITY列。デフォルトはINTERNALです。
SGName 文字列 SGが関連付けられている、作成するIDENTITYフィールドの名前。
Datatype 文字列 IDENTITY列に対してCREATE TABLE文の一部として指定したシーケンス・ジェネレータのデータ型。各IDENTITY列は、INTEGER、LONGまたはNUMBERのいずれかの数値型にできます。
SGAttrVersion Long これは、設定できない内部属性です。将来の使用に備えてここにあります。