2014-09-29 129 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