Oracleで連番
- 2006.07.25
- 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 ;
-
前の記事
SQL*Loader(sqlldr)でデータをまとめてインポート 2006.07.25
-
次の記事
OracleのSQL*Plus便利もの 2006.07.25