質問 |
||
| 質問者:goo_ic | 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 / |
|
質問投稿日時:07/09/03 15:23 質問番号:3311728 |
||
回答 |
|
| 回答者:pkh4989 | これかな〜 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 |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:07/09/12 19:08 回答番号:No.2 |
|
| この回答への補足 | ありがとうございます。 構文そのまんまなんですが、結局、Oracle9i(9.0.1.1.1)環境ではどこでも動かないようですのであきらめました。 |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答 |
|
| 回答者:whiteline507 | 環境が無いのでちょっと分からないですが、 update set A.c = B.cは書式が間違っていないでしょうか? update 表A set A.c = B.cのような気がします。 10gでも「update set A.c = B.c」じゃエラーとなるような気が... |
|---|---|
| 種類:アドバイス どんな人:専門家 自信:参考意見 |
|
| |
回答日時:07/09/08 16:09 回答番号:No.1 |
|
| この回答への補足 | ありがとうございます。 update set A.c = B.c に間違いはありません。 通常のアップデート文では update [table_name] set [field_name] = [値] where [条件文] が基本形ですが、merege文では[条件文]は「on」後ろに、 [table_name]は「into」の後ろに記述します。 よって、10gでは問題なく動作しております。 |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |