ブリオテックブログ

データベースとか仕事で触っています

oracleでシーケンス値を再設定してみる。

テーブルをリネーム



//まずは、テーブルを
リネーム
ALTER TABLE TEST_TABLE01 RENAME TO TEMP_TEST_TABLE01;

//次にインデックスをリネーム
ALTER INDEX TEST_TABLE01_PKEY RENAME TO TEMP_TEST_TABLE01_PKEY;



// シーケンス番号を事前に取得
SELECT TESTTABLE_SEQ01.NEXTVAL FROM dual; //NEXTVALで値を1つ進めて取得
SELECT TESTTABLE_SEQ01.CURRVAL FROM dial; //currvalで現在値を取得


//シーケンスリネーム
ALTER SEQUENCE TESTTABLE_SEQ01 RENAME TO TEMP_TESTTABLE_SEQ01;



nextvalで1つ値を進めてから取得するのは、
いきなりcurrvalで値を取得しようとすると、エラーになるからです。

CURRVALというコマンドは、同じセッション内で最後に取得された数値を返すからです。

評価、自分がNEXTVALコマンド

で取得した値が1000だとして、同時に
他のセッション誰かがいないNEXTVALで1001を取得していたら、
もう一度自分がNEXTVALをした時には1002が戻ってきます。

簡単ではありますが、ここに残しておきます。