2014-09-29 49 views
1

给定表名称后,我无法让我逗号分隔列名称列表。任何参考值得赞赏。逗号分隔的表格列名称列表

所以我的最终结果应该是oracle中的一个sql语句,当它运行时,会给我一个给定表中列名的逗号分隔列表。 (这样我就可以复制粘贴到其他地方列表)

编辑:

所以,如果我的表看起来像这样: 表1(fieidl1,场2,场3)

我期待得到一个字符串像“field1,field2,field3”

所以我可以插入一个单独的sql语句,以按照该顺序从表中选择字段。

+1

你试过'SET COLSEP,'? – drum 2014-09-29 18:17:55

+1

最好提到数据库版本。诸如'LISTAGG'之类的功能可以在11g之后使用。 – 2014-09-29 18:56:44

回答

8

您可以使用来自Oracle数据字典USER_TAB_COLSLISTAGG这样的:

SELECT LISTAGG (COLUMN_NAME, ', ') WITHIN GROUP (ORDER BY COLUMN_ID) 
FROM USER_TAB_COLS WHERE TABLE_NAME = 'YOUR_TABLE' 
+2

'LISTAGG'与11g以上一起使用。最好提到数据库版本。 – 2014-09-29 18:57:31

+0

@LalitKumarB是的,你是对的 – Aramillo 2014-09-29 19:01:04

0

我假设你试图导出* .csv格式的查询。如果是这样,您可以使用SPOOL命令来执行此操作。

SPOOL "C:\file\location\...\file.csv" 
SELECT /*csv*/ * from your_table_name; 
SPOOL OFF; 

欲了解更多信息,和示例看here。更多examples

+0

我正在寻找列名称,而不是表格内容。我对移植到excel文件不感兴趣。我只需要逗号分隔的列列表。某种按摩信息的数量,因此可以将结果集合成一行,逗号分隔 – Brian 2014-09-29 18:25:44

2
select wm_concat(COLUMN_NAME) 
from ALL_TAB_COLUMNS 
where TABLE_NAME='MyTable'; 
0

我的这个解决方案与旧版本的Oracle的工作为好。 :)

with a as (
select rownum r,column_name from cols where table_name ='TableName') 
,b as (
select SYS_CONNECT_BY_PATH(column_name, ',') Fields,rownum rn from a 
start with r=1 
CONNECT BY PRIOR r = r-1),c as (
select * from b order by 2 desc) select Fields from c where rownum =1