Oracle CONNECT BY-Klausel, nach der GROUP BY-Klausel

Ich habe gerade laufen in dieser interessante Artikel hier, der zeigt, wie man simulieren wm_concat() oder group_concat() in Oracle über eine hierarchische Abfrage-und window-Funktionen:

SELECT deptno,
       LTRIM(MAX(SYS_CONNECT_BY_PATH(ename,','))
       KEEP (DENSE_RANK LAST ORDER BY curr),',') AS employees
FROM   (SELECT deptno,
               ename,
               ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY ename) AS curr,
               ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY ename) -1 AS prev
        FROM   emp)
GROUP BY deptno
CONNECT BY prev = PRIOR curr AND deptno = PRIOR deptno
START WITH curr = 1;

Obwohl, ich find das nicht eine sehr gute Lösung, es ist ganz interessant, vor allem weil die CONNECT BY .. STARTS WITH Klausel kommt nach die GROUP BY - Klausel. Nach die Spezifikation, sollte dies nicht möglich sein. Ich habe versucht dieses mit einer einfachen Abfrage und es funktioniert, aber! Die beiden folgenden Abfragen geben dieselben Ergebnisse zurück:

-- wrong according to the specification:
select level from dual group by level connect by level <= 2;
-- correct according to the specification:
select level from dual connect by level <= 2 group by level;

Ist das ein undokumentiertes feature? Oder einfach nur syntax Gleichgültigkeit für die Bequemlichkeit? Oder tun die beiden Aussagen subtil anders Verhalten?

InformationsquelleAutor Lukas Eder | 2012-04-06
Schreibe einen Kommentar