Oracleでシーケンスを作成するには、CREATE SEQUENCE文を使用します。
1 2 3 |
CREATE OR REPLACE SEQUENCE シーケンス名 START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 999 CYCLE NOCACHE |
cycleを指定するとmaxvalueに到達すると、minvalueから割り当てられるように循環します。
権限が不足している場合は、CREATE SEQUENCE権限を付与します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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> |
シーケンスを使ってみます。
1 |
SELECT SEQ01.CURRVAL FROM DUAL; |
すると「ORA-08002: 順序SEQ01.CURRVALはこのセッションではまだ定義されていません」とエラーが出ました。これはNEXTVALをしていないからで、NEXTVALをまずしてみます。
1 |
SELECT SEQ01.NEXTVAL FROM DUAL; |
結果は以下のようになります。
1 |
1 |
次にCURRVALをしてみます。
1 |
SELECT SEQ01.CURRVAL FROM DUAL; |
結果は以下のようになります。
1 |
1 |
以下ALTER文でNOORDERを指定します。
1 2 3 |
ALTER SEQUENCE SEQ01 INCREMENT BY 1 MINVALUE 1 MAXVALUE 10 CYCLE NOCACHE NOORDER |
NOORDERを指定することにより、採番は順序通りにはならなくなります。このへんはキャッシュと関係があるようです。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^