OracleのSEQUENCEについて

Published: 2016年2月17日 by tomsato

◼︎ 概要

Oracleネタが増えてきましたがOracleのsequenceについて調べてみます

Oracle勉強シリーズ

◼︎ SEQUENCEとは

連番や飛び番を発行するための仕組み
この仕組みを使うと一意の番号を簡単に自動生成してくれる
MySQLでいうauto_increment的なもの

◼︎ SEQUENCEの作成方法

// これで作成できる
CREATE SEQUENCE TEST_SEQ1;

// オプションを指定することができる
CREATE SEQUENCE TEST_SEQ
    MINVALUE 1
    MAXVALUE 999999999999
    INCREMENT BY 1
    START WITH 1
    CACHE 1000
    NOCYCLE
    NOORDER
;
オプション 概要 デフォルト
MINVALUE 最小値 nominvalue
MAXVALUE 最大値 nomaxvalue
INCREMENT BY 増分 (整数なら昇順、負数なら降順) 1
START WITH 初期値 昇順の場合:最小値
降順の場合:最大値
CACHE メモリ上に保持するキャッシュ数
キャッシュから値を取れる場合は高速
再起動するとキャッシュは破棄される
20
NOCYCLE サイクルしない nocycle
NOORDER 要求した順に採番することを保証するか
インスタンス毎にキャッシュが用意されるので
インスタンスAとインスタンスBで持っているキャッシュが異なり
NOORDERの場合だと1,30,2,31などの採番になる可能性がある
noorder

◼︎ SEQUENCEの使い方

順序.NEXTVAL 順序の次の値を取得する
順序.CURRVAL 順序の現在の値を取得する
-- シーケンスの取得
SQL> SELECT TEST_SEQ1 FROM DUAL;

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

-- 現在値の取得
SQL> SELECT TEST_SEQ1 FROM DUAL;

   CURRVAL
----------
         1

-- シーケンスの取得
SQL> SELECT TEST_SEQ1 FROM DUAL;

   NEXTVAL
----------
         2

作成したsequence一覧の確認方法

SQL> select sequence_name, last_number from user_sequences order by sequence_name;
 

◼︎ 注意事項

インスタンス単位でのsequenceの現在値を知ることはできない
わかるのは自らが採番した後の現在値(=次の値)だけとなる
(※) CURRVAL という擬似列で現セッション中で最後に採番した番号(=現在値と言い換えることもできる)を知ることはできる
そのセッションで採番 (NEXTVAL) を行なっていない場合には、CURRVAL 擬似列を参照することはできない。

ORA-08002: 順序 sequence_name.CURRVALはこのセッションではまだ定義されていません
 

コメントを書く

※ 個別に返信が必要な時のみご記入ください

※ Emailは公開されません

※ 承認されると名前・コメントが下記に表示されます

コメント一覧

最近の投稿

ビジュアルリグレッションテストについてまとめ、ネットで調べると数多くのライブラリがありどれがどんな立ち位置なのか全体像がわかりずらかったのでどんな種類があるのか入門の入門としてまとめます、またPlaywrightを使って実際に触ってみました

社内ツールなどの超小規模なAPIをGolangで実装する際にフレームワークを使うべきかを、実際にnet/httpを使った実装とフレームワークを使った実装を比較することでどれだけ優位性があるかを見ていきたいと思います。今回はフレームワークにはシンプルで使いやすそうなEchoを使うことにします。

vue-pdfを使ってNuxt.jsで作成しているアプリケーションに pdfスライドを表示させるサンプルを作成しました README.md通りに実装してもうまくいかないところがあったのでそのあたり含めてまとめます

Vue.js / Nuxt.jsにおけるログインの実装方法をまとめる Auth0やNuxt.jsのAuth Moduleとmiddlewareについて調べつつサンプルを作成することで理解を深める

コンポーネント設計について考える Atomic DesignやPresentational Component, Container Componentについてまとめつつ 自分だったらVue.js / Nuxt.jsでどういうコンポーネント設計にするかについてまとめます

カテゴリ一覧

タグ一覧