Ü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
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()!