シーケンスがあまり好きになれない

シーケンスとは

シーケンスとは連番を作り出す為にOracleが用意してくれているオブジェクトです。

1,2,3,4,5…と連続したデータを発動するので、プライマリーキーやユニークキーなどによく使用されます。

MySQLで言うところのAutoIncrementと似たような機能となっています。

シーケンスのコード

CREATE文

CREATE SEQUENCE seqTest
  START WITH 1
  INCREMENT BY 1
  MAXVALUE 1000
  NOCYCLE;

取得文

--連番発行
SQL> select seqTest.nextval from dual;

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

--現在の番号取得
SQL> select seqTest.currval from dual;

   CURRVAL
----------
	 1

 

使用例

SQL> desc TBLSEQ;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 NO                                        NOT NULL NUMBER(3)
 NAME                                               VARCHAR2(10)

--==================
--test0テーブルの値を使用
--==================
SQL> INSERT INTO TBLseq
select seqTest.nextval
           ,concat(TO_CHAR(no) , concat(name,TO_CHAR(no2)))
from test0;

20 rows created.


SQL> select * from tblseq;

        NO NAME
---------- ----------
         1 0a0
         2 0b1
         3 0a2
         4 0b3
         5 1a0
         6 1b2
         7 1a3
         8 1b4
         9 2a0
        10 2b1
        11 2a2

        NO NAME
---------- ----------
        12 2b3
        13 7a0
        14 7b1
        15 7a2
        16 7b3
        17 9a0
        18 9b1
        19 9a2
        20 9b3

20 rows selected.

複数セッションでのシーケンスの扱い

先程の使用例で20までの連番を出力したシーケンスを別のセッションから参照すると、続きの連番から出力されます。

--別セッションに接続
SQL>sqlplus〜〜〜

--シーケンスの発行
SQL> select seqtest.nextval from dual;

   NEXTVAL
----------
        21

Twitterでフォローしよう

おすすめの記事