テーブルの列を更新して最終的に結果を保存する前に、実行したいと思う複雑なロジックがたくさんあります。私はエラーを取得していますし、それを降りすることができました:ORACLEのCTEとテーブルの更新
Error at line 4:
ORA-00928: missing SELECT keyword
set mycol = (select x from my_cte where z.ix = my_cte.ix)
これは単にのCTEは、次のクエリの作品以来の更新で使用することはできませんどういう意味:
with my_cte as
(
select x,ix from y
)
update z
set mycol = (select x from my_cte where z.ix = my_cte.ix)
しかし、これはエラーになります罰金:
update z
set mycol = (select x from y where y.ix = my_cte.ix)
使用バージョン12cのEnterprise Editionのリリース12.1.0.2.0
編集:
妥当なパフォーマンスを得るための唯一の方法は、代わりにMERGE句を使用することでした(以下の回答のようにCTEを使用しています)。オラクルで
merge into z using (
with my_cte as (
select x,ix from y
)
)
on (
my_cte.ix = z.ix
)
when matched then
update set mycol = my_cte.x
CTEは次のように更新サブクエリとして引き続き使用できます。https://stackoverflow.com/a/39534514/603516 – Vadzim