16

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 日かそこらで回答を投稿しますが、その間に他の誰かが投稿するとポイントを獲得できます。

4

1 に答える 1

31

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';
于 2011-07-13T04:03:35.470 に答える