Oracle BI Publisher Tipp Verschachtelte
Strukturen mit und ohne Data Templates
|
|
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,Die Verschachtelung kann mittels Nested Cursorn auch weiter vertieft werden.
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'
XML-Ausgaben
Die XML-Augaben der beiden Abfragen
sehen wie folgt aus. Links das Ergebnis des Data Templates, rechts jenes aus dem Nested Cursor.