- 締切済み
DBのinsert/updateを1ボタンでできる方法
スケジュール登録などで1つのボタンで スケジュールを新規登録する機能(insert)とスケジュールを更新する機能(update)を兼ねる場合どのように実装したらいいでしょうか?以下のやり方以外で、効率よくできる方法を知りたいです。どうかよろしくお願いします。 <実装例概略> ・フォームから値をとってくる。 ・その値がdbにはいっているか(select文)を調べる。 ・値がdbにはいっていればupdate文、dbにはいっていなければinsert文を発行する。 os:winxp(professional) db:Oracle9i
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- ngsvx
- ベストアンサー率49% (157/315)
更新の場合、「既に登録されている内容を表示して、それを修正する」という方法をとらず、 全てを再入力するのですか? そうではなく修正する方法をとるのなら、内容を表示する時点で更新だということが わかっていますから、insertとupdateの判断は出来るんじゃないですか? もっとも、他のユーザーによって作成・削除される可能性があるなら、 この限りではありませんけど。
- tyurajima
- ベストアンサー率28% (16/57)
以下の方法が考えられます。 1.Insert処理を行い、エラーとなった場合(データが既にあるため)、Update処理を行う。 2.Update処理を行い、エラーとなった場合(データが存在しない)、Insert処理を行う。 利点 1の場合:エラーコード(データなしコード)が容易に使える事 2の場合:更新処理を先に行うため、全体的に処理回数が減る事 (スケジュール管理という事で、追加スケジュール件数が少ないという前提です) 欠点 1の場合:必ずInsert処理が起動されるため、更新だけの場合、処理回数が倍(追加処理→更新処理)となる事 2の場合:Update出来なかったというエラーコードを取得できるか分からないため(不勉強でJavaで出来るかわかりません。すみません) 分からない事を書くのは気がひけるのですが、方法という事で許して下さい。
お礼
ありがとうございます。
- osamuy
- ベストアンサー率42% (1231/2878)
oracle9iなら、MERGE文により、いわゆるupsert処理ができるようになっているとか。
お礼
ありがとうございます。 MERGE文だと2つの表が必要ですね。
お礼
ありがとうございます。 更新の場合、「既に登録されている内容があれば、表示してそれを修正する」という方法です。 サーバにリクエストを送る段階では、insertとupdateの判断はできません。