Oracleでシーケンスを作成する

Oracleでシーケンスを作成する

Oracleでシーケンスを作成するには、CREATE SEQUENCE文を使用します。

CREATE OR REPLACE SEQUENCE シーケンス名
START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 999
CYCLE NOCACHE

cycleを指定するとmaxvalueに到達すると、minvalueから割り当てられるように循環します。

権限が不足している場合は、CREATE SEQUENCE権限を付与します。

C:\Users\test>sqlplus /nolog

SQL*Plus: Release 11.2.0.2.0 Production on 木 9月 1 19:37:31 2016

Copyright (c) 1982, 2010, Oracle. All rights reserved.

SQL> conn / as sysdba
接続されました。
SQL> GRANT CREATE ANY SEQUENCE TO USER002;

権限付与が成功しました。

SQL>

シーケンスを使ってみます。

SELECT SEQ01.CURRVAL FROM DUAL;

すると「ORA-08002: 順序SEQ01.CURRVALはこのセッションではまだ定義されていません」とエラーが出ました。これはNEXTVALをしていないからで、NEXTVALをまずしてみます。

SELECT SEQ01.NEXTVAL FROM DUAL;

結果は以下のようになります。

1

次にCURRVALをしてみます。

SELECT SEQ01.CURRVAL FROM DUAL;

結果は以下のようになります。

1

以下ALTER文でNOORDERを指定します。

ALTER SEQUENCE SEQ01
INCREMENT BY 1 MINVALUE 1 MAXVALUE 10
CYCLE NOCACHE NOORDER

NOORDERを指定することにより、採番は順序通りにはならなくなります。このへんはキャッシュと関係があるようです。

コメント

タイトルとURLをコピーしました