12
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SEQUENCE のリセット機能を試す(Oracle Database 18c)

Last updated at Posted at 2018-08-21

Oracle Database 18c の新機能である SEQUENCE のリセット機能を試してみました。

SEQUENCE オブジェクト

SEQUENCE オブジェクト(日本語マニュアルでは「順序」)は、一意な数値を生成するスキーマ・オブジェクトです。CREATE SEQUENCE 文を使って作成します(作成には CREATE SEQUENCE システム権限が必要です)。
初期値、増分、上限、数値を再利用するか等の属性を持ちます。新しい数値を生成するには NEXTVAL 疑似列を指定します。現在の値を確認するには CURRVAL 疑似列を指定します。
下記の例は 100 から初めて 2 ずつ増加させる SEQUENCE を作成して、値を取得しています。


SQL> CREATE SEQUENCE seq1 START WITH 100 INCREMENT BY 2;

Sequence created.

SQL> SELECT seq1.NEXTVAL FROM DUAL;

   NEXTVAL
----------
       100

SQL> SELECT seq1.NEXTVAL FROM DUAL;

   NEXTVAL
----------
       102

SQL> SELECT seq1.CURRVAL FROM DUAL;

   CURRVAL
----------
       102

値のリセット

 これまでのバージョンでは、SEQUENCE の生成した値を初期値に戻すことはできず、削除と再作成が必要でした。Oracle Database 18c では、ALTER SEQUENCE RESTART 文を実行することで、SEQUENCE の値を初期値まで戻すことができるようになりました。
 不便なことに ALTER SEQUENCE RESTART 文は、作成時に実行した CREATE SEQUENCE 文の START WITH 句を無視します。このため、単純に RESTART 句を指定するだけだと START WITH 句のデフォルト値 1 から値が開始されます。開始数値を変更したい場合は ALTER SEQUENCE 文に RESTART 句と START WITH 句を両方指定する必要があります。

SQL> SELECT seq1.NEXTVAL FROM DUAL;

   NEXTVAL
----------
       104

SQL> ALTER SEQUENCE seq1 RESTART;

Sequence altered.

SQL> SELECT seq1.NEXTVAL FROM DUAL;

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

SQL> ALTER SEQUENCE seq1 RESTART START WITH 100;

Sequence altered.

SQL> SELECT seq1.NEXTVAL FROM DUAL;

   NEXTVAL
----------
       100

マニュアル上の記載

実はこの新機能は、マニュアル [SQL言語リファレンス] (https://docs.oracle.com/cd/E96517_01/sqlrf/ALTER-SEQUENCE.html#GUID-A6468B63-E7C9-4EF0-B048-82FE2449B26D "SQL言語リファレンス") には構文が記載されていません (2018年8月21日現在)。
SEQUENCE の値を戻す方法については、以下のように記載されています。

日本語版マニュアル

異なる順序番号で再開する場合、順序を削除して再作成する必要があります。

英語版マニュアル

To restart the sequence at a different number, you must drop and re-create it.

しかし、別のマニュアル「データベース管理者ガイド」には、新機能として記載されていますし、[実行例] (https://docs.oracle.com/cd/E96517_01/admin/managing-views-sequences-and-synonyms.html#GUID-5ABC0615-BE0C-48CE-BD18-C86AAF7DF953) も「24.23 順序の変更」に記載されています。修正されることを望みます。

12
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?