先日、MySQLからOracleに載せ替える案件がありました。
正直これまでLAMP系の開発ばかりだったので、Oracleはかなり久しぶりだったんですよね。
今回、Oracleに変わることで問題になったのは次の点でした。
- auto_incrementが使用できなくなる
- 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