SQL DDL:シーケンス定義
概要
複数のユーザーで共有する。
発番した番号はロールバックできない。
システム障害発生時、発番済みの番号は欠番となる。
伝票番号にユニークな番号を付ける際等に利用する。
CREATE SEQUENCE
初期値
START WITH 初期値
デフォルト値
CREATE SEQUENCE SEQUENCE名
START WITH 1
増分値
INCREMENT BY 増分値
デフォルト値
CREATE SEQUENCE SEQUENCE名
INCREMENT BY 1
最大値/最小値
MAXVALUE 最大値
MINVALUE 最小値
限界値無しの指定も可
CREATE SEQUENCE SEQUENCE名
MAXVALUE NOMAXVALUE
MINVALUE NOMINVALUE
デフォルト値
CREATE SEQUENCE SEQUENCE名
MAXVALUE NOMAXVALUE
MINVALUE 1
周期
CYCLE
CREATE SEQUENCE SEQUENCE名
NOCYCLE
CREATE SEQUENCE SEQUENCE名
MAXVALUE 50
MINVALUE 1
CYCLE
の場合、MAXVALUE(50)の次はMINVALUE(1)を取得する。
デフォルト値
CREATE SEQUENCE SEQUENCE名
NOCYCLE
キャッシュ数
CACHE キャッシュ数
デフォルト値
CREATE SEQUENCE SEQUENCE名
CACHE 20
DROP SEQUENCE
※順序の所有者/DROP ANY 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式)
発番
※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