Oracle シーケンスを使ってみよう

 2018.06.18  株式会社システムインテグレータ

今回はSI Object Browserを使用して、シーケンスを使ってみようと思います。

シーケンス(SEQUENCE)とはテーブルのレコードに連番を振りたい場合などで使います。
比較的良く使うオブジェクトですのでしっかりと押さえておきましょう。

シーケンスを作るには

オブジェクトリスト画面の左ツリーより[SEQUENCE]を選択し、右のリスト上で[新規作成]ボタンを押下します。

Oracle シーケンスを使ってみよう 1

- シーケンスの新規作成画面を呼び出す -


押下するとシーケンスの編集画面が表示されます。
設定値に特にこだわりが無ければ、このまま名前を入力、[作成]を押すとシーケンスが作成されます。

Oracle シーケンスを使ってみよう 2

- シーケンスの新規作成 -

■構文と設定の編集

いまさら聞けない Oracleの基本 [中級編]
新規CTA

CREATE SEQUENCE [スキーマ.]シーケンス名

  [ INCREMENT BY 増分値 ]
  [ START WITH 初期値 ]
  [ MAXVALUE 数値 | NOMAXVALUE ]
  [ MINVALUE 数値 | NOMINVALUE ]
  [ CYCLE | NOCYCLE ]
  [ CACHE 数値 | NOCACHE ]
  [ ORDER | NOORDER ]
  [ KEEP | NOKEEP ]
  [ SESSION | GLOBAL ]

設定

説明

INCREMENT BY増分値

増分値を指定します。負の数を設定すると降順になります。

START WITH初期値

初期値を指定します。

MAXVALUE 最大値 | NOMAXVALUE

最大値を指定します。

NOMAXVALUEは設定可能な数値の最大値がセットされます。

MINVALUE最小値| NOMINVALUE

最小値を指定します。

NOMINVALUEは設定可能な数値の最小値がセットされます。

CYCLE | NOCYCLE

値が最大値に達した場合に最小値に戻すか否かを指定します。

CACHE キャッシュ量 | NOCACHE

高速化の為に番号をメモリにキャッシュするか否かを指定します。

ORDER | NOORDER

順序通りに番号を生成する事を保証するか否かを指定します。

KEEP | NOKEEP

(12c以降)アプリケーション・コンティニュイティにて再実行中に、NEXTVALが元の値を保持するか否か指定します。

SESSION | GLOBAL

(12c以降)採番順序がセッション順になるか否かの指定。



シーケンスを使うには

シーケンスはそれ自体が独立したオブジェクトですので、ただ使う分には「INSERT INTO tbl01(id, name) VALUES(seq_001.nextval, 'hoge');」のように使用します。

また、よくある使用方法としてはテーブルのレコードがINSERTされた際に採番するといった用途があります。これは従来トリガーを使用して対象の項目に採番するといったような方法で利用していました。

しかしOracle12cよりテーブルカラムのデフォルト値にシーケンスを設定することが出来るようになり、SI Object Browserを利用している場合、シーケンスを簡単にセットすることが出来るようになりました。

テーブルの[定義情報]タブを開いて、設定したい項目の[省略時値]の欄に「シーケンス名.nextval」と記載して、更新します。

Oracle シーケンスを使ってみよう 3

- テーブルの定義情報タブで指定 -

以上です。これは知っていると、かなり楽ですね。

また、シーケンスで良くあるのが現在値の確認です。

本来は「SELECT seq_001.currval FROM dual;」とSQLを打って確認するところですが、SI Object Browser なら、シーケンスの編集画面で確認することが出来ます。

(これなら「currval」が出てこず、Web検索する手間がなくなりますね。)

Oracle シーケンスを使ってみよう 4

- 現在の値を確認 -

いかがだったでしょうか。今回は比較的良く使うシーケンスについての記事でした。
仕様変更等でキー項目にシーケンスを使う際は、この記事の内容を有効にお使いください。 

いまさら聞けない Oracleの基本

RELATED POST関連記事


RECENT POST「【OBトコ】DBの勉強」の最新記事


【OBトコ】DBの勉強

データベースのスキーマを理解する

【OBトコ】DBの勉強

データベース別インスタンスの関係性

【OBトコ】DBの勉強

ビューとマテリアライズド・ビューの違いを理解する

【OBトコ】DBの勉強

Oracle 表領域を拡張してみよう

Oracle シーケンスを使ってみよう
新規CTA