- PR -

Oracle9iとSQLServerのUpdateSQLの違い?

1
投稿者投稿内容
shin_fm
常連さん
会議室デビュー日: 2004/05/24
投稿数: 36
お住まい・勤務地: 昼間は千代田区
投稿日時: 2005-04-21 14:56
shin_fmです。

UpdateSQLでOracle9iとSQLServerのUpdateの違いをちょっと
聞きたいのですが、SQLServerだとUpdateSQL文中にFrom句が
書けますよね?。Oracleだと書けないようなんですが、以下
の様なUpdateSQLをOracleで流す場合ってどうしたら良いん
でしょう?。

-----
Update foo set foo.a = bar.a , foo.b = bar.b
from bar
where foo.c = bar.c
-----

SQLServerだと上のSQL文は通ります。bar がSelectSQLであっ
ても通った筈です。
OracleだとこういうUpdate文はストアドを使わないと駄目で
すか?。

SQL文で済めばと思うんですが・・・

platini
大ベテラン
会議室デビュー日: 2002/12/03
投稿数: 193
投稿日時: 2005-04-21 23:01
いま環境がないので試せませんが、
Oracleの場合 こうだったような気が・・・
Update foo set (foo.a,foo.b) =
( SELECT bar.a,bar.b from bar
where foo.c = bar.c )
ただし、foo.cとbar.cの結合により、1つのfoo.cの値に対して
bar.a,bar.bが複数レコードにならない値の組み合わせになっていないと
エラーになりますが、、、

環境がないので自信がないが確かこうだったと思う。
shin_fm
常連さん
会議室デビュー日: 2004/05/24
投稿数: 36
お住まい・勤務地: 昼間は千代田区
投稿日時: 2005-04-25 18:29
shin_fmです。

返事が遅くなって済みません。

引用:

platiniさんの書き込み (2005-04-21 23:01) より:
いま環境がないので試せませんが、
Oracleの場合 こうだったような気が・・・
Update foo set (foo.a,foo.b) =
( SELECT bar.a,bar.b from bar
where foo.c = bar.c )
ただし、foo.cとbar.cの結合により、1つのfoo.cの値に対して
bar.a,bar.bが複数レコードにならない値の組み合わせになっていないと
エラーになりますが、、、

環境がないので自信がないが確かこうだったと思う。



成る程、こう書くんですね、勉強になります。
現在使用中で試せませんので、DBが空いたら試してみたいと思います。

でわ。
あんとれ
ぬし
会議室デビュー日: 2004/01/14
投稿数: 556
投稿日時: 2005-04-26 12:34
最近のDB製品はだいぶんSQL標準を取り入れてきているので、できるだけ製品に依存しない標準的な書き方を学ばれることをお勧めします。
1

スキルアップ/キャリアアップ(JOB@IT)