Hirooooo’s Labo

開発メモ、ガジェット、日記、趣味など、思った事を思ったまんま書くブログ

Oracleのsequenceオブジェクトの使い方

f:id:hirooooo-lab:20160625022830j:plain

Oracleのsequenceで連番を取得しキーに使用したりしてるんですが、如何せんOracle全然つかえないもんで、MySqlならAUTO_INCREMENTで使うようなケースでsequenceつかうんだろーなーとか思うけどあってる?

ってことでsequenceオブジェクトについてまとめてみました

sequenceの基本的なこと

sequenceの作成

CREATE SEQUENCE文を使ってオブジェクトの作成を行う

ex)
CREATE SEQUENCE {seq名}
  START WITH 1
  INCREMENT BY 1
  MAXVALUE 500
  MINVALUE 1
  CYCLE
  CACHE 10
;

設定している内容の概要はこんな感じ

パラメータ 内容
START WITH 開始する値
INCREMENT BY 増減する値
MAXVALUE n / NOMAXVALUE シーケンス最大値
MINVALUE n / NOMINVALUE シーケンス最小値(増分がマイナスの場合とか)
CYCLE / NOCYCLE 最大値に行ったときにシーケンスをループさせるか
CACHE n / NOCACHE メモリー上に保持する数(default=20)

sequenceの変更

ALTER SEQUENCE文で既存sequenceに対しての変更を行う

ALTER SEQUENCE {seq名}
  INCREMENT BY 1
  MAXVALUE 1000
  MINVALUE 1
  CYCLE
;

START WITHは指定できない!!

sequenceの削除

DROP SEQUENCE文で削除を行う

DROP SEQUENCE {seq名}

sequenceの使い方

現在の値を取得

SELECT {seq名}.currval FROM dual;

これで該当sequenceオブジェクトの現在値が取得できます

次の値を取得

SELECT {seq名}.nextval FROM dual;

これで現在値にincrement分加算した値が取得できます

まとめ

sequenceオブジェクトについての基本的なことはこんな感じ これで基本的なことはできると思います ホントは途中で現在値を変更したいって時の方法がわからなかったので調べてみたので、そのやり方をメモしようと思ったんだけど、sequence自体も絶対忘れると思うから先にまとめてみました

現在地を変更する方法は、また今度ってことで