Oracle - WITH CLAUSE =>合并? (语法错误,)

时间:2011-07-13 03:39:31

标签: oracle merge with-statement ora-00928 subquery-factoring

我正在尝试使用WITH子句在Oracle中使用合并,但由于某种原因我无法使其工作。我确信它是显而易见的,但我还没有看到它。

-- 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 个答案:

答案 0 :(得分:23)

您不能在SELECT语句中的任何位置使用WITH子句。 See the documentation here.

  

您可以在任何顶级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';