kenken0807_DBメモ

つば九郎が好きなDBAです。Oracle Standard Editionでの運用やツールとかとかの備忘録。特に記載がない場合はoracle11gR2です。時々MySQL

シーケンスを再作成せずに指定した番号に進める方法

シーケンスを作成した際に、初期値はstart withで指定してあげた値から始めることができる。

create sequence TEST_SEQ start with 10000;
select SEQUENCE_NAME ,MIN_VALUE,CACHE_SIZE,LAST_NUMBER from user_sequences;

SEQUENCE_NAME                   MIN_VALUE CACHE_SIZE LAST_NUMBER
------------------------------ ---------- ---------- -----------
TEST_SEQ                                1         20       10000

しかし、すでに作成されたシーケンスのLAST_NUMBERを変更するにはstart withを使用することができない。
その場合は
1. 再作成(drop・create)する
2. select sequence.nextvalを繰り返す
3. INCREMENT BYNOCACHEを使用する

1.は消去できない場合があるのが難点。
2.は非常にめんどくさい。

3の方法を実施する。

SELECT TEST_SEQ2.NEXTVAL FROM DUAL;

   NEXTVAL
----------
        23

SEQUENCE_NAME                   MIN_VALUE CACHE_SIZE LAST_NUMBER
------------------------------ ---------- ---------- -----------
TEST_SEQ2                               1         20          41

これを+10000番台に変更する。

>ALTER SEQUENCE TEST_SEQ2 INCREMENT BY 10000 NOCACHE;

順序が変更されました。

>SELECT TEST_SEQ2.NEXTVAL FROM DUAL;

   NEXTVAL
----------
     10023

>ALTER SEQUENCE TEST_SEQ2  increment by 1  cache 20;

順序が変更されました。

SEQUENCE_NAME                   MIN_VALUE CACHE_SIZE LAST_NUMBER
------------------------------ ---------- ---------- -----------
TEST_SEQ2                               1         20       10024

これで次回からは10024からスタートすることになる。

>SELECT TEST_SEQ2.NEXTVAL FROM DUAL;

   NEXTVAL
----------
     10024

>SELECT TEST_SEQ2.NEXTVAL FROM DUAL;

   NEXTVAL
----------
     10025

>SELECT TEST_SEQ2.NEXTVAL FROM DUAL;

   NEXTVAL
----------
     10026