こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

DBのinsert/updateを1ボタンでできる方法

スケジュール登録などで1つのボタンで
スケジュールを新規登録する機能(insert)とスケジュールを更新する機能(update)を兼ねる場合どのように実装したらいいでしょうか?以下のやり方以外で、効率よくできる方法を知りたいです。どうかよろしくお願いします。

<実装例概略>
・フォームから値をとってくる。
・その値がdbにはいっているか(select文)を調べる。
・値がdbにはいっていればupdate文、dbにはいっていなければinsert文を発行する。

os:winxp(professional)
db:Oracle9i

投稿日時 - 2004-05-27 16:44:48

QNo.872355

暇なときに回答ください

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(3)

ANo.3

更新の場合、「既に登録されている内容を表示して、それを修正する」という方法をとらず、
全てを再入力するのですか?

そうではなく修正する方法をとるのなら、内容を表示する時点で更新だということが
わかっていますから、insertとupdateの判断は出来るんじゃないですか?

もっとも、他のユーザーによって作成・削除される可能性があるなら、
この限りではありませんけど。

投稿日時 - 2004-05-28 16:16:23

お礼

ありがとうございます。
更新の場合、「既に登録されている内容があれば、表示してそれを修正する」という方法です。
サーバにリクエストを送る段階では、insertとupdateの判断はできません。

投稿日時 - 2004-06-02 19:53:15

ANo.2

以下の方法が考えられます。

1.Insert処理を行い、エラーとなった場合(データが既にあるため)、Update処理を行う。
2.Update処理を行い、エラーとなった場合(データが存在しない)、Insert処理を行う。

利点
 1の場合:エラーコード(データなしコード)が容易に使える事
 2の場合:更新処理を先に行うため、全体的に処理回数が減る事
      (スケジュール管理という事で、追加スケジュール件数が少ないという前提です)

欠点
 1の場合:必ずInsert処理が起動されるため、更新だけの場合、処理回数が倍(追加処理→更新処理)となる事
 2の場合:Update出来なかったというエラーコードを取得できるか分からないため(不勉強でJavaで出来るかわかりません。すみません)

分からない事を書くのは気がひけるのですが、方法という事で許して下さい。

投稿日時 - 2004-05-27 17:30:40

お礼

ありがとうございます。

投稿日時 - 2004-06-02 19:45:43

ANo.1

oracle9iなら、MERGE文により、いわゆるupsert処理ができるようになっているとか。

投稿日時 - 2004-05-27 17:13:34

お礼

ありがとうございます。
MERGE文だと2つの表が必要ですね。

投稿日時 - 2004-06-02 19:30:09

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-