2016-06-23 14 views
0

ich bin nicht vertraut zu DB2 und Oracle können wir tun, um die folgendeneine Unterabfrage WITH-Klausel mit

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

ich eine Anforderung muß so ähnlich wie dies in DB2, aber es mich nicht erlauben. Meine Anforderung ist nicht genau die gleiche wie oben, aber ich habe es vereinfacht.

Es gibt ein anderes Problem, ich versuche, eine XML-Ausgabe auf einem Ergebnis zu machen, das meine unten genannte Frage erhielt. Aber das Problem ist, wenn ich die XMLFOREST Funktion aufrufen, beschränkt es mich, nur eine Spalte als Eingabe zu haben (im Beispiel unten A*B es nicht erlaubt).

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

I A*B in der inneren Abfrage tun könnte und sie als C nennen und dann von der xmlforest Funktion aufrufen, aber meine eigentliche Szenario mir, dass aufgrund der Leistung zu tun nicht erlaubt. Irgendeine Problemumgehung?

Ich bin mit DB2 9.5 Version

+0

Verwenden Sie 'XMLCONCAT', um mehrere XML-Elemente zu assemblieren – Stavr00

Antwort

0

Der allgemeine Zweck des Ausdrucks der allgemeinen Tabelle (was Sie die WITH-Klausel nennen) besteht darin, Unterabfragen zu vermeiden, meist aus Gründen der Lesbarkeit. Anschließend wird der CTE in den äußersten SELECT verwendet:

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

Beachten Sie, dass Namen für berechnete Spalten (B für den Literalwert 'test' im Beispiel oben) zur Verfügung stellen müssen.

+0

In DB2 gibt es keine DUAL-Tabelle, dies entspricht SYSIBM.SYSDUMMY1. –

+0

@HarinathArasu - es gibt, wenn Oracle-Kompatibilität aktiviert ist, was für jemanden, der mit Oracle besser vertraut ist, wie das OP, eine vernünftige Sache zu tun wäre. Außerdem kann Sie nichts daran hindern, einen solchen Tisch selbst zu erstellen. – mustaccio

0

Ich kann nicht Sie mit der XMLFOREST Abfrage helfen, es sei denn, die Daten verketten eine Option, altough Sie wahrscheinlich die IBM Seite überprüfen. IBM XMLFOREST

Die erste Abfrage Sie können so sein zu machen versuchen:

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

Obwohl, ich verstehe nicht, warum Sie stattdessen tun wollen würde, dass nur die Tabelle aufrufen, da Sie nichts zu tun sind mit den Daten.

Ich hoffe, es hilft.