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

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

シーケンスに関するSQL

シーケンスに関するSQLには次のものがある。

SQL説明
CREATE SEQUENCE シーケンスを作成する
ALTER SEQUENCE シーケンスを変更する
DROP SEQUENCE シーケンスを削除する

シーケンスを取得する (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文で順序を使用する例を次に示します。

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

UPDATE文で順序を使用する例を次に示します。

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 自分のスキーマ内にシーケンスを作成する。
自分が所有するシーケンスを変更する。
自分が所有するシーケンスを削除する。
自分が所有するシーケンスから現在値または次の値を参照する。
ALTER ANY SEQUENCE 他ユーザのスキーマ内にあるシーケンスを変更する。
DROP ANY SEQUENCE 他ユーザのスキーマ内にあるシーケンスを削除する。
SELECT ANY SEQUENCE 他ユーザのスキーマ内にあるシーケンスから現在値または次の値を参照する。
オブジェクト権限 SELECT このシーケンスから現在値または次の値を参照する。