- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MERGE INTO 処理について)
MERGE INTO 処理についての質問
このQ&Aのポイント
- MERGE INTO 処理について質問です。TBL001にレコードを追加・更新するSQLを作成しましたが、Updateは成功するものの、INSERTがうまくいきません。
- 質問文章のSQLは正しいか分からず、Oracle初心者のため困っています。
- 助けていただきたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>やりたいことは、TBL001にレコードを追加・更新したいので、 追加したいデータ、更新したいデータはどこですか? SQLを見るからに、固定値(or入力値)ですよね? つまり1件の入力データについて、更新または登録を行えば良いことになるかと思います。 あなたの書いたSQLは、intoとusageに書いたテーブルが同じになっていますが、これだと データの入力源が固定値なのに、それと関係ないテーブルを書いていることになります。 あなたがやりたいことを”無理矢理”merge文で表現すると・・ merge into TBL001 S usage (select '2006/12/01' DJUJU_DAY,'003001' VJUJU_NO from dual) N on (S.DJUJU_DAY=N.DJUJU_DAY and S.VJUJU_NO=N.VJUJU_NO) when matched then update set S.VRNR_SKZY_FLG='0', S.NUPD_CNT= DECODE(S.NUPD_CNT,999,1,S.NUPD_CNT + 1), S.DUPD_NTJ=SYSDATE when not matched then insert (DJUJU_DAY,VJUJU_NO,VRNR_SKZY_FLG,NUPD_CNT,DUPD_NTJ) values(N.DJUJU_DAY,N.VJUJU_NO,'0','1',sysdate) ; な感じになります。 このような目的で、構文の複雑なmerge文を使うメリットって少ないと思いますよ。
お礼
回答ありがとうございます VBの画面から、追加・更新を行っていて 毎回、データの存在チェックをするのが めんどくさくて、Oracle側でやろうと考えていました。 考えが甘かったみたいですね・・・・ 普通にUP INを分けて処理を作っています