シーケンス(順序)

Oracleのシーケンスとは、1, 2, 3,…のような連番を作成できるデータベース・オブジェクトです。レコードをINSERTするときにユニークなIDを生成するのに便利です。この記事ではシーケンスの使い方をご紹介します。

シーケンス(順序)とは、一意な整数を生成することができる順序番号ジェネレータ(生成器)です。順序はスキーマ・オブジェクトです。

目次

  1. SQL
    1. CREATE SEQUENCE
    2. ALTER SEQUENCE
    3. DROP SEQUENCE
  2. 疑似列
    1. NEXTVAL
    2. CURRVAL
  3. システム権限
    1. CREATE SEQUENCE
    2. ALTER ANY SEQUENCE
    3. DROP ANY SEQUENCE
    4. SELECT ANY SEQUENCE
  4. オブジェクト権限
    1. SELECT
  5. データ・ディクショナリ・ビュー
    1. ALL_SEQUENCES
    2. DBA_SEQUENCES
    3. USER_SEQUENCES

SQL文

順序(シーケンス)を操作するSQL文の一覧を以下に示す。

CREATE SEQUENCE

CREATE SEQUENCE は、順序を作成するSQL文である。

ALTER SEQUENCE

ALTER SEQUENCE は、順序を変更するSQL文である。

DROP SEQUENCE

DROP SEQUENCE は、順序を削除するSQL文である。

シーケンスを取得する (NEXTVAL)

順序から新たな順序値を生成するには、NEXTVAL擬似列を参照します。NEXTVAL擬似列を参照する構文は次のとおりです。

sequence.NEXTVAL

SELECT文で新たに順序値を生成するには、FROM句にDUAL表を指定します。SELECT文で新たに順序値を生成する例を次に示します。

SQL> SELECT customerid_seq.NEXTVAL FROM DUAL;

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

SQL> SELECT customerid_seq.NEXTVAL FROM DUAL;

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

SQL>

行を挿入するときに順序を使用する例を次に示す。

INSERT INTO emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
VALUES (empno.NEXTVAL, '堀内まり菜', 'CHAIRMAN', NULL, '10-04-01', 5000, NULL, 10)

行を更新するときに順序を使用する例を次に示す。

UPDATE customer SET customer_id = customerid_seq.NEXTVAL WHERE customer_name = '矢島舞美'

なお、トランザクションをロールバックしても、シーケンス番号は元に戻らない。

シーケンスを確認する (CURRVAL)

NEXTVALでシーケンスを取得した後、CURRVAL擬似列でシーケンスの現在値を確認できる。

sequence.CURRVAL

SELECT文で最後に生成した順序値を参照するには、FROM句にDUAL表を指定します。SELECT文で最後に生成した値を参照する例を次に示します。

SQL> SELECT customerid_seq.CURRVAL FROM DUAL;

 CURRVAL
----------
       2

SQL>

NEXTVALでシーケンスを取得していない状態でCURRVALを参照すると、「ORA-08002: 順序sequence.CURRVALはこのセッションではまだ定義されていません」のエラーが発生する。

システム権限

順序を操作するために必要なシステム権限の一覧を以下に示す。

CREATE SEQUENCE

CREATE SEQUENCE は、自分のスキーマ内にシーケンスを作成するシステム権限である。自分が所有するシーケンスを変更したり、削除することもできる。自分が所有するシーケンスから現在値または次の値を参照することもできる。

ALTER ANY SEQUENCE

ALTER ANY SEQUENCE は、他ユーザのスキーマ内にあるシーケンスを変更するシステム権限である。

DROP ANY SEQUENCE

DROP ANY SEQUENCE は、他ユーザのスキーマ内にあるシーケンスを削除するシステム権限である。

SELECT ANY SEQUENCE

SELECT ANY SEQUENCE は、他ユーザのスキーマ内にあるシーケンスから現在値または次の値を参照するシステム権限である。

オブジェクト権限

順序を操作するために必要なオブジェクト権限の一覧を次に示す。

SELECT

SELECT は、この順序から現在値または次の値を参照するオブジェクト権限である。

SQL> GRANT ON empno TO TSUKAMOTO;

データ・ディクショナリ

順序に関するデータ・ディクショナリ・ビューの一覧を以下に示す。

ALL_SEQUENCES

ALL_SEQUENCES は、現在のユーザーがアクセスできる順序を示すデータ・ディクショナリ・ビューである。

ALL_SEQUENCES
データ型 NULL
SEQUENCE_OWNER VARCHAR2(30) NOT NULL
SEQUENCE_NAME VARCHAR2(30) NOT NULL
MIN_VALUE NUMBER
MAX_VALUE NUMBER
INCREMENT_BY NUMBER NOT NULL
CYCLE_FLAG VARCHAR2(1)
ORDER_FLAG VARCHAR2(1)
CACHE_SIZE NUMBER NOT NULL
LAST_NUMBER NUMBER NOT NULL

SEQUENCE_OWNER

順序の所有者

SEQUENCE_NAME

順序名

MIN_VALUE

順序の最小値

MAX_VALUE

順序の最大値

INCREMENT_BY

順序が増やされるときの増分値

CYCLE_FLAG

限度に達したときに、順序の繰返しを実行するかどうか

CYCLE_FLAG
説明
Y 順序の繰返しを実行する
N 順序の繰返しを実行しない

ORDER_FLAG

順序番号が順番に生成されるかどうか

ORDER_FLAG
説明
Y 順序番号が順番に生成される
N 順序番号が順番に生成されない

CACHE_SIZE

キャッシュする順序番号の数

LAST_NUMBER

最後にディスクに書き込まれる順序番号。順序にキャッシュが使用される場合、ディスクに書き込まれる番号は、最後に順序キャッシュに入れられた番号。この番号は、前回に使用された順序番号より大きくなる。

DBA_SEQUENCES

DBA_SEQUENCES は、データベース内すべての順序を示すデータ・ディクショナリ・ビューである。

DBA_SEQUENCES
データ型 NULL
SEQUENCE_OWNER VARCHAR2(30) NOT NULL
SEQUENCE_NAME VARCHAR2(30) NOT NULL
MIN_VALUE NUMBER
MAX_VALUE NUMBER
INCREMENT_BY NUMBER NOT NULL
CYCLE_FLAG VARCHAR2(1)
ORDER_FLAG VARCHAR2(1)
CACHE_SIZE NUMBER NOT NULL
LAST_NUMBER NUMBER NOT NULL

USER_SEQUENCES

USER_SEQUENCES は、現在のユーザーが所有する順序を示すデータ・ディクショナリ・ビューである。

USER_SEQUENCES
データ型 NULL
SEQUENCE_NAME VARCHAR2(30) NOT NULL
MIN_VALUE NUMBER
MAX_VALUE NUMBER
INCREMENT_BY NUMBER NOT NULL
CYCLE_FLAG VARCHAR2(1)
ORDER_FLAG VARCHAR2(1)
CACHE_SIZE NUMBER NOT NULL
LAST_NUMBER NUMBER NOT NULL