Hatena::ブログ(Diary)

niwaのoracle日記 このページをアンテナに追加 RSSフィード Twitter

2009-02-19

OracleでAutoIncrement

02:24 | OracleでAutoIncrementを含むブックマーク 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の機能として乗せてほしいところですが。。。

Connection: close