我试图让WITH子句与Oracle中的merge一起工作,但是由于某种原因我无法使其工作。我敢肯定这很明显,但是我还没看过。

-- 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;


编辑

我实际上找到了解决方法(在提交问题之前),但是我认为由于花了我很多时间来找到答案,所以希望把这个问题搁置一旁意味着下一个人会很快找到它的很多时间。

我将在一天左右的时间内发布答案,但是如果有人在此同时发布答案,他们将获得积分。

最佳答案

您不能在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';

10-08 17:40