はじめに
テーブル作成の際にシーケンスを使用・テスト時にエラーが発生し解消したので
今後のために書き留めておく。
シーケンスとは
シークエンス(sequence)、シークエンシング(sequencing)は、一般には「連続」「順序」という意味を持つ。シークェンス、シーケンスとも。
テーブルでデータを一意に特定するために使用します。
作成方法
以下のコマンドで作成出来ます。
CREATE SEQUENCE seq_no
START WITH 1
INCREMENT BY 1
MAXVALUE 100
NOCYCLE;
seq_noという名前のシーケンスを作成します。
START WITH
:順序番号の初期値です。
INCREMENT BY
:インクリメントする値を設定します。
例えば2にすると「1, 3, 5, 7 ...」という感じにインクリメントされます。
MAXVALUE
:順序の最大値を指定します。
NOCYCLE
:順序が最大値または最小値に達した場合は、それ以上値を生成しないように指定できます。
他にもMINVALUEなど様々な指定が出来ます。
以下のページを参考にしました。
Oracle® Database SQL言語リファレンス
シーケンスがずれてしまった
無事にシーケンスも作成し、テスト環境で動作も確認し安心していたところ
次の日に以下のエラーが発生。
duplicate key value violates unique constraint
コードも確認して、シーケンスも問題ない、なぜ、、、
テーブルのレコードを確認してみると追加した覚えのないレコードがたくさん。
原因は他のメンバーが該当テーブルにてデータをコピーしていたため
シーケンスがずれてしまったようです。
以下の手順で修正
次の採番値を確認
SELECT nextval('テーブル名_シーケンス名_seq');
次の採番値をテーブルのデータに合わせる
SELECT setval('テーブル名_シーケンス名_seq', (SELECT MAX(シーケンス名) FROM テーブル名));
以上。