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の機能として乗せてほしいところですが。。。