ひでっぷの技術メモ

はてなダイアリーから移行しました

oracleで自動連番をふる −Sequence−

SQLサーバーなんかにはフィールドのオプションにIDENTITYというものがあって、これを設定しておくとデータINSERT時に自動的に連番を付加してくれます。
oracleで同じものはないかなと探してみるとありました。

oracleの場合はフィールドのオプションとしてはなく、Sequenceオブジェクトを使用します。

まずはSequenceオブジェクトを作成します。
構文は


CREATE SEQUENCE シーケンス名

オプションには
START WITH :連番開始番号
INCREMENT BY:増分値
MAXVALUE:最大値
MINVALUE:最小値
CYCLE:MAXVALUEまで行った後、最小値に戻るか
CACHE:メモリ上の確保値

自動連番を取得するには擬似列のNEXTVALとCURRVALを使用します。

たとえばAというテーブルにフィールドがID(NUMBER),NAME(VARCHAR2)とあり、IDを自動連番にする場合は

INSERT INTO A VALUES(シーケンス名.NEXTVAL,"名称1");

SQLを発行すると自動連番されます。
連番値は次にNEXTVALを呼び出すまで保持されるので今の連番値を取り出したい場合はCURRVALを使用します。