【发布时间】:2019-11-06 00:51:29
【问题描述】:
我试图在一个表中显示所有列的名称,在一行中用逗号分隔,然后将它们保存在一个变量中。
哪种方法最好?
我有这样的东西:
SELECT tab.column_name || decode(lead(tab.column_name,1) over (order by tab.column_id),null,'',',')
FROM
all_tab_columns tab,
all_constraints pk,
all_cons_columns pk_det
WHERE
tab.table_name = pk.table_name (+)
and pk.table_name = pk_det.table_name (+)
and tab.owner = pk.owner (+)
and pk.owner = pk_det.owner (+)
and pk.constraint_name = pk_det.constraint_name (+)
and tab.column_name = pk_det.column_name (+)
and tab.data_type not like '%LOB%'
and tab.owner = :OWNER_SOURCE
and tab.table_name = :TABLE_NAME_SOURCE
结果是这样的:
ID,
_LOCALE,
LABEL,
OBSERVATIONS
但是...我需要这种方式:
ID,_LOCALE,LABEL,OBSERVATIONS
提前致谢。
【问题讨论】:
-
摆脱过时的
(+)左连接运算符。使用标准的LEFT JOIN语法 -
感谢@Serg 的建议。我使用了函数 LISTAGG,它解决了这个疑问。谢谢!
标签: sql oracle string-aggregation