Oracleで連番

連続した番号を自動的に生成して主キーに使用する。

<社員番号を自動生成>
EMPテーブルに社員番号EMP_IDカラムがあるとする。

■順序の作成

EMP_ID_SEQという名前の順序(シーケンス)を作る。

CREATE SEQUENCE emp_id_seq
  START WITH 1
  INCREMENT BY 1
  NOCACHE ;

NOCHACHEを指定しないと20個の値がキャッシュされる。

■順序の確認 (user_sequences)

SELECT sequence_name, last_number
FROM user_sequences ;

last_numberは、次にメモリー上に取得される順序番号を表示する。

■順序(シーケンス)を使って社員番号にする

INSERT INTO emp (emp_id, ename)
VALUES  (emp_id_seq.NEXTVAL , '田中') ;

■単純に次の番号を見たいとき

SELECT emp_id_seq.NEXTVAL 
FROM dual ;

カウントアップされて、次にふられる番号が1大きくなるので注意。
ま、シリアル番号なんてものは重複しなければよい、というのが目的だから気にしなくていいんだけど。シリアル番号に意味を持たせてはいけないのだ。

■順序を作り直したいとき

動作をテストさせてOKとなって、再度1からスタートさせたいとき。
データをインポートする前に、10000からスタートさせたいときなど。

実は、「別の番号」からスタートさせるには、順序を削除して再作成する必要があるのだ。
ということで、

DROP SEQUENCE emp_id_seq;

再作成、

CREATE SEQUENCE emp_id_seq
  START WITH 10000
  INCREMENT BY 1
  NOCACHE ;