OracleでAutoIncrement

MySQLのようにautoincrementをOracleで使いたいことが多々ありますが
Oracleにはautoincrementに相当する機能はありません。

Oracleで同等のことをしたいときはDMLTriggerを駆使します。
たとえば

こんなテーブルと

CREATE TABLE TEST_USER
(
    ID NUMBER NOT NULL,
    NAME VARCHAR2(200),
    CONSTRAINT PK_TEST_USER PRIMARY KEY (ID)
);

こんなシーケンスが

CREATE SEQUENCE SEQ_TEST_USER
    INCREMENT BY 1 START WITH 1;

あったら
こんなトリガーをつくります。

CREATE OR REPLACE TRIGGER TRG_TEST_USER
BEFORE INSERT ON TEST_USER FOR EACH ROW 
BEGIN
	SELECT SEQ_TEST_USER.NEXTVAL INTO :NEW.ID FROM DUAL;
END;
/

そしてこんな感じでInsertしてみると

INSERT INTO TEST_USER(NAME) VALUES('名前');

PKだけどIDをセットしなくてもInsertできます。

かなり面倒ですが、ひとまずこれでautoincrement的なことは出来ます。

この方法ですが、実はORACLE社的には結構普通に使っているようで
JDeveloper,Oracleのブラウザベースのコンソールとかで
テーブル作成するときに設定すると自動でシーケンス、トリガーとか設定してくれます。

そこまでするならDBの機能として乗せてほしいところですが。。。