0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Oracle Database SQL (1Z0-071-JPN)試験 シーケンス【第11章_中編】

0
Last updated at Posted at 2026-04-10

シーケンスとは

連番を自動的に生成して、一意の数値を払い出すスキーマオブジェクト。
主キー(サロゲートキー)の自動採番に多く使われる。
シーケンスはトランザクションの影響を受けない。NEXTVAL を呼んだ後にトランザクションをロールバックしても、その番号は再使用されず飛び番が発生する。
シーケンスの作成には CREATE SEQUENCE システム権限が必要。


シーケンスの作成

CREATE SEQUENCE <シーケンス名>
  [INCREMENT BY <増分値>]
  [START WITH <初期値>]
  [MAXVALUE <最大値> | NOMAXVALUE]
  [MINVALUE <最小値> | NOMINVALUE]
  [CYCLE | NOCYCLE]
  [CACHE <キャッシュ数> | NOCACHE]
  [ORDER | NOORDER]
  [SESSION | GLOBAL];

主なオプションのデフォルト値

オプション デフォルト 説明
INCREMENT BY 1 増分値(負の値にすると降順)
START WITH 1 最初に返す値
MAXVALUE NOMAXVALUE(上限なし) 最大値
MINVALUE 1(NOMINVALUE) 最小値
CYCLE / NOCYCLE NOCYCLE(循環しない) 最大値到達後の動作
CACHE 20(20個をキャッシュ) メモリキャッシュ数
ORDER / NOORDER NOORDER 払い出し順序の保証
SESSION / GLOBAL GLOBAL スコープ(後述)

CYCLE と NOCYCLE の動作

  • CYCLE:シーケンスの値が最大値(MAXVALUE)に達した場合、MINVALUE の値に戻って連番を再開する

  • NOCYCLE(デフォルト):最大値に達すると、その後の NEXTVAL 呼び出しはエラーになる(ORA-08004)


CACHE と NOCACHE の動作

  • CACHE n(デフォルト 20):指定した数のシーケンス値をメモリにキャッシュし、データディクショナリへのアクセスを削減してパフォーマンスを向上させる
  • NOCACHE:値をキャッシュしない。毎回データディクショナリにアクセスするため低速だが、番号の飛び抜けが発生しにくい

シーケンス値の取得

NEXTVAL(疑似列)

<シーケンス名>.NEXTVAL

順序を増加させて次の値を返す疑似列。
同一 SQL 文の中で NEXTVAL を複数参照しても、1行につき1回しか増加しない(同じ値が返る)。

CURRVAL(疑似列)

<シーケンス名>.CURRVAL

そのセッションで最後に取得した NEXTVAL の値を返す疑似列。

【試験の注意点】CURRVAL の使用前に NEXTVAL が必要
そのセッションで一度も NEXTVAL を実行していない状態で CURRVAL を参照すると、ORA-08002 エラーが発生する。


CURRVAL / NEXTVAL が使用できる場所

使用可能 使用不可
副問合せを含まない SELECT 文の SELECT リスト DELETE / SELECT / UPDATE 文内の副問合せ
INSERT の VALUES 句 ビューの問合せ / マテリアライズドビュー
INSERT 内副問合せの SELECT リスト DISTINCT を持つ SELECT 文
UPDATE の SET 句 GROUP BY / ORDER BY を持つ SELECT 文
UNION / INTERSECT / MINUS による集合演算の SELECT 文
WHERE 句
CHECK 制約の条件

シーケンスの変更

ALTER SEQUENCE <シーケンス名>
  [INCREMENT BY <増分値>]
  [MAXVALUE <最大値> | NOMAXVALUE]
  [MINVALUE <最小値> | NOMINVALUE]
  [CYCLE | NOCYCLE]
  [CACHE <キャッシュ数> | NOCACHE];
  • START WITH は変更できない(変更するにはシーケンスを削除して再作成する)

シーケンスの留意点

  • 連番の途中で飛び番(空き)が発生することがある。原因はロールバック・インスタンス再起動・CACHE での未使用値の破棄など
  • 一度払い出したシーケンス番号は、ロールバックしても再使用されない
  • シーケンスはトランザクションとは独立している。COMMIT / ROLLBACK の影響を受けず、NEXTVAL を呼んだ瞬間に永続的に増加する
  • 複数のユーザーや複数の表で同一のシーケンスを共有できる

シーケンスの削除

DROP SEQUENCE <シーケンス名>;

セッションシーケンス(SESSION SEQUENCE)

Oracle 12c Release 1 以降で使用可能な、セッション内でのみ一意な値を払い出すシーケンス。

CREATE SEQUENCE <シーケンス名> SESSION;
  • 主に一時表(TEMPORARY TABLE)の一意制約や、読取り専用データベースでの採番などに使用される
  • 別のセッションが接続すると同じ値(1 など)から再開される。同一セッション内では一意だが、セッションをまたいでの一意性は保証されない
  • SESSION 句を指定しない通常のシーケンスは GLOBAL SEQUENCE と呼ばれる(GLOBAL キーワードは省略可)

GLOBAL SEQUENCE と SESSION SEQUENCE の比較

GLOBAL SEQUENCE SESSION SEQUENCE
一意性の範囲 データベース全体 セッション内のみ
セッションをまたいだ重複 なし あり(別セッションで同じ値が返る)
用途 主キーなど全体で一意な値が必要な場合 一時表など、セッションスコープで十分な場合
パフォーマンス 通常 より高速

参考

  1. CREATE SEQUENCE・NEXTVAL・CURRVAL・CACHE・CYCLE ...

  2. 順序(シーケンス)の作成や削除方法のまとめ - Oracle使いのネタ帳

  3. Oracle sequences and concurrency

  4. PostgreSQL と Oracle Database でシーケンスの動作を比較する - Qiita

  5. CREATE SEQUENCE

  6. Oracle シーケンスを使ってみよう - 株式会社システムインテグレータ

  7. SESSION SEQUENCEを試す(Oracle Database 19c

  8. CREATE SEQUENCE

  9. CREATE SEQUENCE編 - オラクルちょこっとリファレンス

  10. 順序疑似列

  11. 順序疑似列 - Oracle Help Center

  12. CURRVAL

  13. Oracle Database シーケンスを変更する - mebee

  14. 2011/03 - 2011/04 - Oracle Blogs 日本語のまとめ

  15. Typical uses of Oracle sequences | Simple Talk

  16. | Global Vs Session Based Sequence in Oracle|Session Based Sequence in Oracle|Oracle 12C New Feature

  17. 一時表の作成と使用 – | oraclemaster - Oracle Blogs

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?