探してみたらあるもんだ。一部でUpsertとか言われてるらしいw
(単に知らなかっただけとも言うw)
DBの更新作業で、データがあったらUpdate、無ければInsertを一発で書ける方法。
(※Oracle 9i以降)
MERGE INTOって関数があるんだって。
しかも同一表をDUAL表を使ってMERGEかける方法。(複数条件版)
MERGE INTO HOGE_TABLE A USING ( SELECT 'A01' U_ID, '500' C_CODE FROM DUAL ) B ON ( A.USER_ID = B.U_ID AND A.HOGE_CODE = B.C_CODE ) WHEN MATCHED THEN UPDATE SET A.DATA1 = '0000001', A.DATA2 = B.C_CODE WHEN NOT MATCHED THEN INSERT ( USER_ID, HOGE_CODE, DATA1, DATA2, DATA3 ) VALUES ( B.U_ID, B.C_CODE, '0000001', B.C_CODE, ( SELECT MAX(C.DATA1) + 1 FROM HOGE_TABLE C WHERE C.USER_ID = B.U_ID AND C.HOGE_CODE = B.C_CODE ) );
思い出しながら今書いてるから、間違えてて後で直す可能性もありw
いくつかググって見たんだけど、USINGの複数条件がなぜか”AND”じゃ無くて”,”で説明されているサイトが多く、今日かなり悩んだ・・・。
後はVALUESの中で直に副問合せが書けるってぐらいかなぁ。
なんとなくSQL判ってきたかもww(いまさら?w
昔SQLServerで同じ実装を@@ROWCOUNT取って一発で2本のSQLを発行するってロジック組んだことあるんだけど、それを標準で実装してくれたようなもんだよね。
いやぁ、便利な世の中になったもんだ(そうなのか?w
コメント