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''