Похоже, вы хотите выбрать имя таблицы и столбцы, которые она содержит.
LISTAGG
, в данном случае, не требует предложения OVER
, потому что вам придется использовать GROUP BY
(если вы также хотите получить имя таблицы), поэтому он будет выполнять разбиение работа; также GROUP BY
- в свою очередь - делает DISTINCT
ненужным.
Примерно так:
SQL> select table_name,
2 listagg(column_name, ',' ) within group(order by column_id) col_list
3 from all_tab_cols
4 where owner = 'SCOTT'
5 and table_name in ('DEPT' , 'BONUS')
6 group by table_name;
TABLE_NAME COL_LIST
---------- --------------------------------------------------
BONUS ENAME,JOB,SAL,COMM
DEPT DEPTNO,DNAME,LOC
SQL>
XMLAGG
версия будет выглядеть следующим образом; как и выше, специальное разбиение не требуется, поскольку GROUP BY
делает это:
SQL> select table_name,
2 rtrim(xmlagg(xmlelement(e, column_name || ',').extract('//text()')
3 order by column_id).getclobval(), ',' ) col_list
4 from all_tab_cols
5 where owner = 'SCOTT'
6 and table_name in ('DEPT' , 'BONUS')
7 group by table_name;
TABLE_NAME COL_LIST
---------- --------------------------------------------------
BONUS ENAME,JOB,SAL,COMM
DEPT DEPTNO,DNAME,LOC
SQL>