SQL DDL:シーケンス定義

概要

作成した順序(SEQUENCE名)毎に発番、値を保持するオブジェクト。
複数のユーザーで共有する。
発番した番号はロールバックできない。
システム障害発生時、発番済みの番号は欠番となる。
伝票番号にユニークな番号を付ける際等に利用する。

CREATE SEQUENCE

初期値
CREATE SEQUENCE SEQUENCE名
  START WITH 初期値

デフォルト値
CREATE SEQUENCE SEQUENCE名
  START WITH 1

増分値
CREATE SEQUENCE SEQUENCE名
  INCREMENT BY 増分値

デフォルト値
CREATE SEQUENCE SEQUENCE名
  INCREMENT BY 1

最大値/最小値
CREATE SEQUENCE SEQUENCE名
  MAXVALUE 最大値
  MINVALUE 最小値

限界値無しの指定も可
CREATE SEQUENCE SEQUENCE名
  MAXVALUE NOMAXVALUE
  MINVALUE NOMINVALUE

デフォルト値
CREATE SEQUENCE SEQUENCE名
  MAXVALUE NOMAXVALUE
  MINVALUE 1

周期
CREATE SEQUENCE SEQUENCE名
  CYCLE

CREATE SEQUENCE SEQUENCE名
  NOCYCLE

CREATE SEQUENCE SEQUENCE名
  MAXVALUE 50
  MINVALUE 1
  CYCLE
の場合、MAXVALUE(50)の次はMINVALUE(1)を取得する。

デフォルト値
CREATE SEQUENCE SEQUENCE名
  NOCYCLE

キャッシュ数
CREATE SEQUENCE SEQUENCE名
  CACHE キャッシュ数

デフォルト値
CREATE SEQUENCE SEQUENCE名
  CACHE 20

DROP SEQUENCE

DROP SEQUENCE名

※順序の所有者/DROP ANY SEQUENCE権限保持者のみ

ALTER SEQUENCE

ALTER SEQUENCE名

・初期値は変更不可(DROP順序&再CREATE順序が必要)
・ALTERは、所有者/ALTER ANY SEQUENCE権限保持者 が実行可能
・発番済みの番号以降の数値が影響を受ける
・実行時、妥当性がチェックされる
 例:発番済み番号>MAXVALUE値の時エラー

値の取得

発番(NextVal)/値の取得(CurVal)は以下の場所で使用可能。
・SELECT
・INSERT(VALUE句)
・INSERT(副問い合わせ文)
・UPDATE(SET句)
以下では使用不可
・SELECT(副問い合わせ文)
・SELECT(GroupBy/Distinct/Having/OrderByを含む)
・SELECT(ビュー)
・CREATE TABLE(DEFAULT式)
・ALTER TABLE(DEFAULT式)

発番
SELECT SEQUENCE名.NEXTVAL FROM DUAL;

※DUAL
ORACLEがデフォルトで持つ表。

DUALを用いずに発番する場合
UPDATE 表名 SET 列名 = SEQUENCE名.NEXTVAL

現在番号の取得
【ディクショナリ情報】
Oracle データディクショナリ・ビュー/シーケンス情報」参照

【CURRVAL】
SELECT SEQUENCE名.CURRVAL FROM DUAL;

※DUAL
ORACLEがデフォルトで持つ表。

【DUALを用いずに現在番号を取得する場合】
UPDATE 表名 SET 列名 = SEQUENCE名.CURRVAL
※SEQUENCE名.NEXTVALを実行する前に呼び出すとエラー

【途中でユーザーを変更する場合】
CONNECT ユーザー1/パスワード1
SELECT SEQUENCE名.NEXTVAL ~
SELECT SEQUENCE名.CURRVAL ~ :OK

CONNECT ユーザー2/パスワード2
SELECT SEQUENCE名.CURRVAL ~ :エラー
ユーザーが変わった場合もNEXTVALが必要

SELECT SEQUENCE名.NEXTVAL ~
SELECT SEQUENCE名.CURRVAL ~ :OK

セキュリティ

次の記事

WEB認証