• 締切済み

oracleでwith句の結果を使ってupdate

oracleでwith句の結果を使って外部結合?でupdateしたいのですが 上手くいきません。 oracleでは無理なのでしょうか。 よろしくお願いいたします、。 /*---------- with v1 as ( select row_number() over(PARTITION BY ・・・ ORDER BY ・・・) as rnum ,no ,col1 ,・・・ from ・・・ ) update ( select A.col1 A_COL, v1.col2 B_COL from table1 A inner join table2 B on A.cd1=B.cd1 inner join v1 on A.no=v1.no where v1.rnum=1 and ・・・ ) set A_COL=B_COL ; ----------*/ と書いたのですが、 実際に実行してみると、 カッコ「(」、「)」がないとか、 selectが必要とか, A_COLやB_COLが無効ですとか、 となります。 どこが悪いのでしょうか。 oracleではupdateでwithは使えないのでしょうか。 よろしくお願いします。

みんなの回答

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

省略部分が多く各テーブルのテーブル名や主キーが何かわかりませんが 最近のOracleならMerge文が使えるのでそれで解決出来るかもしれません。

abc999xyz
質問者

お礼

ありがとうございます。 Merge文ですか。 使用したことがないですが、調べてみます。

  • mabyos
  • ベストアンサー率52% (61/117)
回答No.1

https://teratail.com/questions/139251 withは使用可能なようですが、インラインビューが更新可能である必要があるとあります。 最初のwithの部分をcreate as ワークテーブルのように書き換えることが 可能であれば、そこまで大がかりな変更はいらないように思います。 ただし、この方法はcreateなので暗黙のコミットがかからない場合にのみ可能です。

abc999xyz
質問者

お礼

ありがとうございます。 インラインビューを使った更新で可能みたいですが、 難しいそうですね。 できるかどうか不明ですが、試してみます。

関連するQ&A