2014-09-29 4 views
1

Мне не удалось получить список имен столбцов, разделенных запятыми, с учетом имени таблицы. Любые ссылки приветствуются.Список имен столбцов, разделенных запятыми

Таким образом, мой конечный результат должен быть выражением sql в oracle, которое при запуске даст мне список столбцов с разделителями-запятыми в данной таблице. (Так что я могу копировать вставить список в другом месте)

редактировать:

Так что, если моя таблица выглядит следующим образом: table1 (fieidl1, Field2, field3)

Я ищу, чтобы получить строку например «field1, field2, field3»

поэтому я могу подключиться к отдельному оператору sql, чтобы выбрать поля из таблицы в этом порядке.

+1

Вы пробовали 'SET COLSEP,'? – drum

+1

Лучше упомянуть версию БД. Такие функции, как 'LISTAGG', работают с 11 г вперед. –

ответ

8

Вы можете использовать USER_TAB_COLS из словаря оракула и LISTAGG как это:

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

'LISTAGG' работает с 11 g и далее. Лучше упомянуть версию БД. –

+0

@LalitKumarB Да, вы правы – Aramillo

0

Я предполагаю, что вы пытаетесь экспортировать запрос в формате * .csv. Если это так, вы можете использовать команду SPOOL для этого.

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

Для получения дополнительной информации и примеров см. here. Подробнее examples.

+0

Я ищу только имена столбцов, а не содержимое таблицы. Мне не интересно переносить файл excel. Мне просто нужен список столбцов, разделенный запятыми. некоторый вид массирования информации_схемы. columns eqiuvalent, поэтому набор результатов столбцов можно сделать в одну строку, запятую, разделенные запятой. – Brian

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

Это решение горных работ со старой версии оракула, а также. :)

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 
Смежные вопросы