OracleでWITH句をマージで機能させようとしていますが、何らかの理由で機能させることができません。それは明らかなことだと思いますが、私はそれを見たことがありません。
-- behold, the wonders of fake data
WITH X AS (
SELECT
'moo' AS COW,
'woof' AS CAT,
(SELECT MAX( DECIBELS ) FROM ANIMALIA WHERE COW = 'moo' ) AS DECIBELS
FROM DUAL )
MERGE INTO ANIMALIA D
USING X
WHEN MATCHED THEN
UPDATE SET D.COW = X.COW;
私は実際にこれを管理する方法を(質問を送信する前に)見つけましたが、答えを見つけるのにかなりの時間がかかったので、この質問を残しておくと、次の人がそれを見つけることができないことを意味すると思いますたくさんの時間。
回答は1日程度で投稿しますが、その間に誰かが投稿するとポイントがもらえます。
WITH句は、SELECTステートメント以外では使用できません。 こちらのドキュメントを参照してください。 :
この句は、任意のトップレベルのSELECTステートメントおよびほとんどのタイプのサブクエリで指定できます。
したがって、次のようなことができます(11gテスト済み):
MERGE INTO animalia d
USING (WITH X AS
(SELECT 'moo' AS COW, 'woof' AS CAT,
(SELECT MAX( DECIBELS )
FROM ANIMALIA
WHERE COW = 'moo' ) AS DECIBELS
FROM DUAL )
SELECT * FROM X) q ON (1 = 1)
WHEN MATCHED THEN UPDATE SET d.cow = q.cow||' and more';