8. Mai 2007

XML Erzeugen mit den SQL/XML-Funktionen: Das geht sogar rekursiv ...

Wie erzeugt man XML ...? Eigentlich nun soweit geklärt: Mit den SQL/XML-Funktionen kann man XML-Dokumente beliebiger Struktur erzeugen - Kommentare, CDATA-Abschnitte, Namespaces: alles kein Problem! ... bis auf eines ... wie macht man eigentlich "rekursives" XML ...? Am Beispiel der EMP-Tabelle bedeutet das: Jeder Angestellte wird durch ein XML-Tag repräsentiert. Wenn er Manager ist, sollen seine "Untergebenen" als 1:n-Beziehung unterhalb eingeordnet werden ... und dies rekursiv ... Nur mit SQL SELECT-Anweisungen bzw. mit Views ist das nicht machbar - man braucht eine PL/SQL-Prozedur, die sich rekursiv selbst aufruft, als Hilfsmittel ...
create or replace function get_emps_xml(p_mgr_empno in EMP.EMPNO%TYPE default -1)
return xmltype
is
 v_xml xmltype;
begin
 select
  xmlelement("employees",
   xmlagg(
    xmlelement("employee",
     xmlattributes(empno as "id"),
     xmlforest(
       ename as "name",
       hiredate as "hiredate",
       sal as "salary"
     ),
     get_emps_xml(empno)
    )
   )
  )
 into v_xml
 from emp where nvl(mgr, -1) = p_mgr_empno;
 return v_xml;
end;
/

create or replace view emp_rec_xml as
select get_emps_xml from dual;
Ruft man die so erzeugte View EMP_REC_XML dann auf, so erhält man folgendes:

Keine Kommentare:

Beliebte Postings