2024年のうちにやっておきたいこと、ここで宣言しませんか?

以下のような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
/

A 回答 (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

この回答への補足

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

補足日時:2007/09/21 17:06
    • good
    • 0

環境が無いのでちょっと分からないですが、


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

この回答への補足

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

補足日時:2007/09/10 12:43
    • good
    • 0

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

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

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


おすすめ情報