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

締切り済みの質問

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は使えないのでしょうか。

よろしくお願いします。

投稿日時 - 2019-03-08 11:03:21

QNo.9594809

困ってます

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

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

回答(2)

ANo.2

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

投稿日時 - 2019-03-09 12:13:28

お礼

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

投稿日時 - 2019-03-11 08:26:31

ANo.1

https://teratail.com/questions/139251

withは使用可能なようですが、インラインビューが更新可能である必要があるとあります。

最初のwithの部分をcreate as ワークテーブルのように書き換えることが
可能であれば、そこまで大がかりな変更はいらないように思います。

ただし、この方法はcreateなので暗黙のコミットがかからない場合にのみ可能です。

投稿日時 - 2019-03-08 17:36:10

お礼

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

投稿日時 - 2019-03-11 08:30:35

あなたにオススメの質問