[ Oracle ] シーケンスの取得(nextval / currval)

Pocket

Oracle でシーケンスを作成した直後は、現在値には値が入っていません。現在値が未設定のまま SQL でシーケンスの現在値を取得しようとすると ORA-08002 エラーが発生します。 ここでは、出力されるエラーと対応方法について掲載しています。

スポンサーリンク

現在値が未設定の場合

Oracle シーケンスでは現在値が未設定のままの状態で、現在値を取得しようとするとエラーとなります。サンプルでは、シーケンス名を seq1 としています。

ORA-08002: 順序SEQ1.CURRVALはこのセッションではまだ定義されていません

SQL> select seq1.currval from dual;

select seq1.currval from dual
 *
行1でエラーが発生しました。:
ORA-08002: 順序SEQ1.CURRVALはこのセッションではまだ定義されていません

シーケンスは現在値の設定から

シーケンス値は、最初にシーケンスを取得 ( nextval ) して現在値 ( cuuval ) を設定させておく必要があります。 そうすることで、現在値 ( cuuval ) が正常に取得できるようになります。

-- シーケンスの取得
SQL> select seq1.nextval from dual;

 NEXTVAL
----------
 1

-- 現在値の取得
SQL> select seq1.currval from dual;

 CURRVAL
----------
 1

-- シーケンスの取得
SQL> select seq1.nextval from dual;

 NEXTVAL
----------
 2

ちなみに、シーケンス作成時に開始番号に3、増分に1を設定したからといって、現在値が2と なるようなことはありません。堅物です。

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *