Mit XML und xpath in einer Oracle SQL Query arbeiten

Über den Trick XML zu erzeugen kann zum Beispiel eine Baumstruktur in SQL erzeugt werden und wieder flach ausgeben werden.

Ein erstes Beispiel für XMLTABLE und einen xpatch:

SELECT * FROM XMLTABLE( 'PivotSet/item' Passing (
    SELECT * FROM ( 
             SELECT schema_name
                  , (SELECT COUNT(*)
                      FROM dba_proxies p
                     WHERE p.client = u.schema_name)
                      percount
              FROM admin_users u
              WHERE U.USER_TYPE != 'PERSONAL'
             GROUP BY schema_name )
      pivot xml (
                 MAX(percount) FOR schema_name IN (SELECT schema_name FROM admin_users WHERE USER_TYPE != 'PERSONAL' )
         )
     )
    COLUMNS  schemaname    PATH '//column[@name="SCHEMA_NAME"]'
           , counter       PATH '//column[@name="MAX(PERCOUNT)"]'
 ) vals
 
 
SCHEMANAME , COUNTER
---------------------
T1  11
T2  26
...

Mehr demnächst

XNL Baum erzeugen

SELECT XMLELEMENT("proxy_rights_list",
         XMLAGG (
           XMLELEMENT("schema_name",
             XMLATTRIBUTES(u.id AS "schema_id"),
             XMLFOREST(
               u.schema_name AS "schema",
               (SELECT XMLAGG(
                         XMLELEMENT("proxy_from",
                           XMLFOREST(
                            p.proxy AS "prox_user"
                           )
                         )
                       )
                FROM   dba_proxies p
                WHERE p.client = u.schema_name
               ) "proxy_list"
             )
           )
         )
       ).getClobVal() AS "user_schemas"
 
FROM admin_users u
WHERE U.USER_TYPE != 'PERSONAL'

als Text ausgeben mit .getClobVal()!


Quellen

Oracle:

Web