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穣。まず枯渇することはない。