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と なるようなことはありません。堅物です。