Oracle - with CLAUSE => объединить? (Синтаксическая ошибка,)
Я пытаюсь заставить предложение WITH работать с merge в 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 ответов
предложение WITH можно использовать только в инструкции SELECT. см. документацию здесь.:
вы можете указать это предложение в любом операторе SELECT верхнего уровня и в большинство типов подзапросов.
Итак, вы можете сделать что-то вроде этого (11G tested):
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';