Oracle BI Publisher Tipp

Verschachtelte Strukturen mit und ohne Data Templates

Autor

Rainer Willems

Version

10.1.3.3.1


Verschachtelte XML-Strukturen mittels SQL aus der Datenbank ziehen geht sehr gut mit Data Templates. Im aktuellen Release (also bis inklusive 10.1.3.3.3) gibt es aber leider noch kein graphisches User Interface um diese Data Templates zu erstellen. 

Mit der Version 10.1.3.4 wird es ein solches Tool geben, um mehrerer SQL-Abfragen miteinander zu verbinden und somit auch sehr einfach geschachtelte XML-Strukturen aus der Datenbank zu bekommen.

Doch kann man auch jetzt schon ein solches XML - beispielsweise Master-Detail - ohne Data Templates erzeugen.

Beispiel

Wir wollen eine Struktur erzeugen, die die Abteilungen mit Ihrem jeweiligen Manager ausgibt. Darunter geschachtelt sollen alle direkt an den Abteilungsmanager berichtenden Mitarbeiter aufgeführt werden. Ziel ist also eine Struktur, die die Daten in der folgenden Form wiedergibt:

ACCOUNTING
NEW YORK
CLARK
   MILLER, CLERK

RESEARCH
DALLAS
JONES
   SCOTT, ANALYST
   FORD, ANALYST

...

Data Template

Ein passendes Data Template für diese Struktur wäre das folgende

<dataTemplate name="Test">
   <dataQuery>
      <sqlStatement name="QueryDept">
         SELECT DEPT.DEPTNO, DNAME, LOC, ENAME, EMPNO AS MANAGER_EMPNO
           FROM DEPT, EMP
           WHERE DEPT.DEPTNO = EMP.DEPTNO
           AND JOB = 'MANAGER'
      </sqlStatement>
      <sqlStatement name="QueryEmp">
         SELECT ENAME,JOB
           FROM EMP
          WHERE MGR = :MANAGER_EMPNO
      </sqlStatement>
   </dataQuery>
   <dataStructure>
      <group name="G_DEPT" source="QueryDept">
         <element name="DEPTNO" value="DEPNTO"/>
         <element name="DNAME" value="DNAME"/>
         <element name="LOC" value="LOC"/>
         <element name="ENAME" value="ENAME"/>
         <group name="TEAM" source="QueryEmp">
            <element name="ENAME" value="ENAME"/>
            <element name="JOB" value="JOB"/>
         </group>
      </group>
   </dataStructure>
</dataTemplate>

Nested Cursor

Mit Hilfe eines Nested Cursor kann man auch direkt mit einem SQL-Statement eine verschachtelte Struktur erzeugen.

SELECT DEPT.DEPTNO,
       DNAME,
       LOC,
       ENAME,
       CURSOR(SELECT b.ENAME, b.JOB
                FROM EMP b
               WHERE b.MGR = a.EMPNO) AS Team
  FROM DEPT, EMP a
 WHERE DEPT.DEPTNO = a.DEPTNO
   AND a.JOB = 'MANAGER'
Die Verschachtelung kann mittels Nested Cursorn auch weiter vertieft werden.

XML-Ausgaben

Die XML-Augaben der beiden Abfragen sehen wie folgt aus. Links das Ergebnis des Data Templates, rechts jenes aus dem Nested Cursor.