Oracleのシーケンスとは、1, 2, 3,…のような連番を作成できるデータベース・オブジェクトです。レコードをINSERTするときにユニークなIDを生成するのに便利です。この記事ではシーケンスの使い方をご紹介します。
シーケンス(順序)とは、一意な整数を生成することができる順序番号ジェネレータ(生成器)です。順序はスキーマ・オブジェクトです。
順序(シーケンス)を操作するSQL文の一覧を次に示す。
順序から新たな順序値を生成するには、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 = '矢島舞美'
なお、トランザクションをロールバックしても、シーケンス番号は元に戻らない。
NEXTVALでシーケンスを取得した後、CURRVAL擬似列でシーケンスの現在値を確認できる。
sequence.CURRVAL
SELECT文で最後に生成した順序値を参照するには、FROM句にDUAL表を指定します。SELECT文で最後に生成した値を参照する例を次に示します。
SQL> SELECT customerid_seq.CURRVAL FROM DUAL;
CURRVAL
----------
2
SQL>
NEXTVALでシーケンスを取得していない状態でCURRVALを参照すると、「ORA-08002: 順序sequence.CURRVALはこのセッションではまだ定義されていません」のエラーが発生する。
順序を操作するために必要なシステム権限の一覧を次に示す。
順序を操作するために必要なオブジェクト権限の一覧を次に示す。
順序に関するデータ・ディクショナリ・ビューの一覧を次に示す。
列 | データ型 | 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 |