Oracleのオートナンバー
OracleにはMySQLのauto_increment、PostgreSQLのserial,bigserialが無い。そこで一般的なのがテーブルにトリガーを設定して自動で行わせるというのがかなり一般的に使用されています。Oracleにも一応テーブルの列にデフォルト値を設定する事は可能なのですが、これにシーケンスを指定するとエラーになるので結局上の方法を選択しないといけなくなる。その方法をメモ
テーブル・シーケンスを作成
CREATE TABLE sample(
ID number primary key,
NAME varchar2(50)
);
CREATE SEQUENCE sample_seq;
トリガーを作成
CREATE OR REPLACE TRIGGER sample_trigger
BEFORE INSERT ON sample
FOR EACH ROW
DECLARE
nn number;
BEGIN
SELECT
sample_seq.NEXTVAL
INTO
nn
FROM
dual;
:new.id := nn;
:new.name := :new.name || '!!';
END;
/
あとはデータ追加する際にID列を指定しないでINSERTを実行するとナンバリングができている模様