みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

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

締切り済みの質問

MERGE文について

以下のようなSQL文を作成し、Oracle10gで実行したところ、正常に実行されていたのですが、同一のSQL文をOracle9iで実行したところ、
ORA-00905: キーワードがありません。
とエラーがでてしまいました。

merge文はOracle9iから追加された?ものだったと記憶しているですが、思い違いでしょうか?
それともOracle9i、Oracle10gで何か違いがあるのでしょうか?

Oracleのバージョンはそれぞれ以下の通りです。

Oracle10g:10.1.0.2.0
Oracle9i:9.0.1.1.1

よろしくお願い致します。


<やりたいこと>
A表のa列とb列が、B表のa列とb列と一致したものレコードのみ、B表のc列の内容にA表のc列をアップデートする。(インサートはしない)

merge into 表A A
using 表B B
on (A.a = B.a and A.b = B.b)
when matched then
update set A.c = B.c
/

投稿日時 - 2007-09-03 15:23:37

QNo.3311728

すぐに回答ほしいです

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

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

回答(2)

ANo.2

これかな~

merge into 表A A
using (select a,b,c from 表B) B
on (A.a = B.a and A.b = B.b)
when matched then
update set A.c = B.c

投稿日時 - 2007-09-12 19:08:06

補足

ありがとうございます。
構文そのまんまなんですが、結局、Oracle9i(9.0.1.1.1)環境ではどこでも動かないようですのであきらめました。

投稿日時 - 2007-09-21 17:06:16

ANo.1

環境が無いのでちょっと分からないですが、
update set A.c = B.cは書式が間違っていないでしょうか?
update 表A set A.c = B.cのような気がします。
10gでも「update set A.c = B.c」じゃエラーとなるような気が...

投稿日時 - 2007-09-08 16:09:37

補足

ありがとうございます。
update set A.c = B.c
に間違いはありません。
通常のアップデート文では
update [table_name] set [field_name] = [値] where [条件文]
が基本形ですが、merege文では[条件文]は「on」後ろに、
[table_name]は「into」の後ろに記述します。
よって、10gでは問題なく動作しております。

投稿日時 - 2007-09-10 12:43:48

あなたにオススメの質問