CREATE SEQUENCE文は、一意な整数を生成し複数のユーザーで使用するための、順序番号ジェネレータを新しく作成します。 CREATE SEQUENCE文を使用して、順序の初期値を定義します。また、増分値、最大値または最小値を定義し、順序が最小値または最大値に達した後、数値の生成を続行するかどうかを指定します。
必要な権限
CREATE SEQUENCE(所有者の場合)またはCREATE ANY SEQUENCE(非所有者の場合)
SQL構文
CREATE SEQUENCE [Owner.]SequenceName [INCREMENT BY IncrementValue] [MINVALUE MinimumValue] [MAXVALUE MaximumValue] [CYCLE] [CACHE CacheValue] [START WITH StartValue]
パラメータ
CREATE SEQUENCEには、次のパラメータがあります。
説明
CREATE SEQUENCE文のすべてのパラメータは整数値である必要があります。
パラメータに値を指定しない場合、TimesTenでは、1から開始し、1ずつ増加し、デフォルトの最大値を持ちサイクルしない昇順がデフォルトで作成されます。
TimesTenにはALTER SEQUENCE文はありません。順序を変更する場合は、DROP SEQUENCE文を使用してから、同じ名前の順序を新規作成します。 たとえば、MINVALUE
を変更する場合、順序を削除し、同じ名前で必要なMINVALUE
を持つ順序を再度作成します。
ビューまたはマテリアライズド・ビューと同じ名前の順序は作成しないでください。
CURRVALとNEXTVALによるSEQUENCE値の増加
SQL文でSEQUENCE値を参照するには、CURRVALとNEXTVALを使用します。
CURRVALは、現在のセッションでNEXTVALがコールされていればその最新の値を返し、コールされていなければエラーを返します。
NEXTVALは、指定された増分で順序の現在値を増加させ、アクセスされた行ごとに値を返します。
NEXTVALとCURRVALは、次の場合に使用できます。
SELECT文のSelectList
。ただし、副問合せのSelectList
は除きます。
INSERT...SELECT文のSelectList
UPDATE文のSET句
1つのSQL文で複数のNEXTVAL参照を使用した場合、TimesTenでは順序を一度だけ増加させ、すべてのNEXTVALに対して同じ値が返されます。
SQL文にNEXTVALとCURRVALの両方が含まれている場合は、NEXTVALが最初に実行されます。CURRVALとNEXTVALは、SQL文では同じ値を持ちます。
順序の現在値は、接続ごとに異なります。同じデータ・ストアに2つの同時接続がある場合、各接続は同じ順序について、最後のNEXTVAL参照により設定された独自のCURRVALを取得します。
リカバリでは、順序はロールバックされません。順序の値の範囲に幅を持たせることができます。順序の各値は一意のままです。
最大値に達した場合、CREATE SEQUENCEのCYCLEオプションの値によって、SEQUENCEはサイクルする(開始値に戻る)か、エラー文を生成します。
注意: CYCLE属性が指定された順序はレプリケートできません。 |
例
順序を作成します。
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;
関連項目