我得到了这个SQL查询:
select rtrim(extract(xmlagg(xmlelement(e, column_name || ',')),
'/E/text()').getclobval(), ',') from all_tab_columns
where OWNER = 'TESTER' AND TABLE_NAME = 'H4_POSIT';
我使用此代替LISTAGG(column_name,','),因为结果将超出varchar2(> 4000)的限制。 现在我问自己是否有可能像LISTAGG那样对结果进行排序。
所以当有列FERA,BAUT,CHECK_ID,......我希望它们能像以下一样返回:BAUT,CHECK_ID,FERA,......
我使用的是Oracle Server,我的框架不允许我使用PL / SQL。
答案 0 :(得分:8)
XMLAGG
支持自行订购(请参阅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'
答案 1 :(得分:2)
您可以使用子查询并在将列传递给xml函数之前对列进行排序。一个简单的解决方案。
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 );