とっておきの手土産を教えて

こんばんは。
複数テーブルの複数カラムをupdateしたいのですが、
うまくいかず困っています。
どなたか助けてください>_<

テーブルA(tableA)のoptionAというカラムと、
テーブルB(tableB)のoptionBというカラムを両方更新したいんです。

やりたい内容のイメージとしてはこんな感じです↓
update tableA a, tableB b
set a.optionA='OK', b.optionB='OK'
where a.student_id=b.student_id and a.name='山田';

どなたかご指導お願いいたします。

A 回答 (3件)

where条件に別テーブルの結合を必要とするので、同時に更新したい・・・


ということならば、以下のようなupdate文を2回発行ではだめなんでしょうか?

update tableB b
set b.optionB='OK'
where exists(
select * from tableA a
where a.student_id=b.student_id and a.name='山田'
);

update tableA a
set a.optionA='OK'
where a.name='山田';
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
”山田”という条件も固定ではなく違うDBから取得したいと考えていたので、
どうにか1つにならないかなぁっと考えていました。
でもやはり2つに分ける方がわかりやすですね。。
ありがとうございます☆

お礼日時:2009/12/23 00:26

1回のUPDATE文で複数テーブルの更新はできません。



質問の目的によりますが、
2回UPDATEしたくない事情としては、
アプリケーションからDBMSへの通信をどうしても1回にしたい、というためでしょうか?

であれば、2テーブルを更新するようなPROCEDUREを作成し、それをコールするようにすれば、「アプリケーションからDBMSへ1回の通信で複数テーブルを更新する」ということは実現できます。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます!
2回UPDATEしたくない理由はいくつかあるのですが
おっしゃるとおり、通信を1回にしたいというのもその一つです。

PROCEDUREというのは始めて聞きました!
調べてつかえるようにしてみます。

ありがとうございます☆

お礼日時:2009/12/23 00:28

1つのUPDATE文で2つの表を同時に更新することはできないと思いますよ。



更新可能ビューを使えばできそうに思えますが、

「ORA-01776: 結合ビューを介して複数の実表を変更できません。」

というエラーになります。

マニュアルにも、

「結合ビューに対するINSERT、UPDATEまたはDELETE操作は、基礎となる実表を一度に1つしか変更できません。」

と記載されています。

http://otndnld.oracle.co.jp/document/products/or …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
マニュアル読みました。
やはり2つ同時は厳しいんですね。
別々で実行してみます☆

お礼日時:2009/12/23 00:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


おすすめ情報