MySQLからOracleに載せ替え auto_incrementやlastInsertIdの代用

投稿者: | 2017年5月1日

先日、MySQLからOracleに載せ替える案件がありました。
正直これまでLAMP系の開発ばかりだったので、Oracleはかなり久しぶりだったんですよね。

今回、Oracleに変わることで問題になったのは次の点でした。

  1. auto_incrementが使用できなくなる
  2. lastInsertIdが使用できなくなる

どちらの問題もOracleのシーケンス機能で回避できました。

まず下記のような感じで、Oracle内にシーケンスを作ります。ここでは「seq_user_id」という名前のシーケンスです。

create sequence seq_user_id

 このシーケンスをauto_incrementを使っているテーブルにinsertしているSQLに組み込みます。NEXTVALというのがシーケンスを取得する関数です。

INSERT INTO users(id, name) VALUES(seq_user_id.NEXTVAL, 'test');

lastInsertIdについては、insertしてからidを取得していたのを、insertする前にidを取得して、そのidをinsert文に使うことになります。
insert前にシーケンスを取得するSQLは次のようになります。

select seq_user_id.NEXTVAL