Ben*_* C. 4 sql sorting string oracle oracle11g
我有这个SQL查询:
select rtrim(extract(xmlagg(xmlelement(e, column_name || ',')),
'/E/text()').getclobval(), ',') from all_tab_columns
where OWNER = 'TESTER' AND TABLE_NAME = 'H4_POSIT';
Run Code Online (Sandbox Code Playgroud)
我使用它而不是LISTAGG(column_name,','),因为结果将超过varchar2(> 4000)的限制.现在我问自己是否有可能像LISTAGG那样对结果进行排序.
因此,当列FERA,BAUT,CHECK_ID,...我希望它们返回为:BAUT,CHECK_ID,FERA,...
我正在使用Oracle Server,我的框架不允许我使用PL/SQL.
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'
Run Code Online (Sandbox Code Playgroud)
小智 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 );
Run Code Online (Sandbox Code Playgroud)