2016-06-23 4 views
0

Я не знаком с DB2 и Oracle, мы можем сделать следующийВыберите более подзапрос, имеющий с п

select * from 
(WITH A AS (SELECT 'test' FROM DUAL) 
SELECT * 
    FROM A) 

У меня есть требование, так похожее на это в DB2, но она не позволит мне. Мое требование не совсем то же, что и выше, но я упрощен.

Есть еще одна проблема, я пытаюсь сделать вывод XML по результатам, полученным с использованием моего нижеследующего запроса. Но проблема в том, что когда я вызываю функцию XMLFOREST, она ограничивает меня наличием только столбца в качестве ввода (в примере ниже пример A*B он не позволяет).

SELECT XMLELEMENT (
     NAME "DATA", 
     XMLAGG (XMLELEMENT (NAME "DJ_STOCK", (XMLFOREST (A, B, A * B))))) 
FROM (SELECT * 
     FROM (SELECT RTRIM (RTRIM (6.0000), '.') A, 
        RTRIM (RTRIM (6.0000), '.') B 
       FROM SYSIBM.SYSDUMMY1)) 

я мог сделать A*B во внутреннем запросе, и называют его C, а затем вызвать из функции xmlforest, но мой фактический сценарий не позволяет мне сделать это из-за работы. Любое обходное решение?

Я использую DB2 9.5 версию

+0

Использование XMLCONCAT для сборки нескольких элементов XML – Stavr00

ответ

0

Вся цель выражения общей таблицы (то, что вы называете предложением WITH) заключается в том, чтобы избежать подзапросов, в основном для удобства чтения. Впоследствии КТР используется в наружном SELECT:

WITH A (B) AS (SELECT 'test' FROM DUAL) 
select * from 
(SELECT * 
    FROM A) 

Обратите внимание, что вы должны предоставить имена для вычисляемых столбцов (B для буквального значения 'test' в приведенном выше примере).

+0

В DB2 нет таблицы DUAL, что эквивалентно SYSIBM.SYSDUMMY1. –

+0

@HarinathArasu - есть совместимость с Oracle, что было бы разумной задачей для кого-то более знакомого с Oracle, такого как OP. Кроме того, ничто не помешает вам создать такой стол самостоятельно. – mustaccio

0

Я не могу помочь вам с запросом XMLFOREST, если конкатенации данных не вариант, Altough вы, вероятно, можете проверить страницу IBM. IBM XMLFOREST

Первый запрос вы пытаетесь сделать может быть, как это:

SELECT test 
FROM (SELECT 'test' AS test 
     FROM DUAL) A 

Хотя, я не понимаю, почему вы хотели бы сделать это вместо того, чтобы просто звоню таблицу, так как вы ничего не делаете с данными.

Надеюсь, что это поможет.