◼︎ 概要
Oracleネタが増えてきましたがOracleのsequenceについて調べてみます
Oracle勉強シリーズ
- Oracleの表領域についてまとめてみた
- Oracleのパーティションについてまとめてみた
- Oracle ダイレクトロードインサートについて
- OracleのSEQUENCEについて
- Oracleのパーティションインデックスについて
- Oracleのフェイルオーバーについて
- Oracle11gから12cへの移行の注意点
◼︎ 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はこのセッションではまだ定義されていません
コメントを書く
コメント一覧