multiple developer desc columns asc sql string oracle sorting oracle11g

sql - developer - Ordenar el resultado de xmlagg(xmlelement(...)



order by sql developer (2)

Tengo esta consulta SQL:

select rtrim(extract(xmlagg(xmlelement(e, column_name || '','')), ''/E/text()'').getclobval(), '','') from all_tab_columns where OWNER = ''TESTER'' AND TABLE_NAME = ''H4_POSIT'';

Estoy usando esto en lugar de LISTAGG (column_name, '','') porque el resultado va a exceder el límite de varchar2 (> 4000). Ahora me pregunto si es posible ordenar el resultado como lo hace LISTAGG.

Entonces, cuando tenga columnas FERA, BAUT, CHECK_ID, ... Me gustaría que se devuelvan como: BAUT, CHECK_ID, FERA, ...

Estoy usando Oracle Server y mi framework no me permite trabajar con PL / SQL.


Puede usar una subconsulta y simplemente ordenar las columnas antes de pasarlas a la función xml. Una solución simple.

select rtrim(extract(xmlagg(xmlelement(e, column_name || '','')), ''/E/text()'').getclobval(), '','') from (select * from all_tab_columns where OWNER != ''TESTER'' AND TABLE_NAME=upper(''H4_POSIT'') order by COLUMN_NAME );


XMLAGG admite realizar pedidos por sí solo (consulte https://docs.oracle.com/database/121/SQLRF/functions251.htm ):

SELECT rtrim( extract( xmlagg( xmlelement(e, column_name || '','') ORDER BY column_name ), ''/E/text()'') .getclobval (), '','') FROM all_tab_columns WHERE owner = ''TESTER'' AND table_name = ''H4_POSIT''