Oracle DB のシーケンスを作成・参照・操作する

Oracle DB のシーケンスを参照したり、「1 ずつ増える」挙動を「100 ずつ増える」挙動に変更してみたりする。

-- シーケンス一覧を取得する
SELECT * FROM USER_SEQUENCES;

-- 次のシーケンス値を取得 (実行するたびにインクリメントされる)
SELECT my_sequence.NEXTVAL FROM DUAL;

-- シーケンスの増加率を 100 に変える
ALTER SEQUENCE my_sequence INCREMENT BY 100;

-- この状態でシーケンス値を取得すると 100 増加する
SELECT my_sequence.NEXTVAL FROM DUAL;

-- 増加率を元に戻す
ALTER SEQUENCE my_sequence INCREMENT BY 1;

前職ではこうした SQL でシーケンス値を書き換えてデータ不整合を手直ししたりしていた…。

シーケンスは以下のように作れる。

CREATE SEQUENCE my_sequence       -- シーケンス名
    START WITH 0                  -- 初期値
    INCREMENT BY 1                -- 増分
    [NOMINVALUE | MINVALUE 0]     -- 最小値
    [NOMAXVALUE | MAXVALUE 9999]  -- 最大値
    [NOCYCLE | CYCLE]
    [NOCACHE | CACHE 5]           -- キャッシュ数
    [NOORDER | ORDER];

シーケンス値の最大値は、正の場合28桁 ≒ 1穣。まず枯渇することはない。