Привет, мне нужно выполнить все строки из таблицы. У меня есть этот запрос select * from table1;
Эта таблица содержит 400 полей Я не могу это сделать select column1 ||','||column2||','||.....from table1
может кто-то помочь e исправить это, используя select * from table1 для конкатенации всех строк. И спасибо.concat все строки в одном ряду
ответ
В Oracle (и аналогичные в других СУБД) можно использовать системные таблицы .... и сделать это в два этапа:
Предполагая, что вы хотите, чтобы объединить все столбцы в 1 столбце для X строк ...
ШАГ 1:
SELECT LISTAGG(column_Name, '|| Chr(44)||') --this char(44) adds a comma
within group (order by column_ID) as Fields
--Order by column_Id ensures they are in the same order as defined in db.
FROM all_tab_Cols
WHERE table_name = 'YOURTABLE'
and owner = 'YOUROWNER'
--Perhaps exclude system columns
and Virtual_Column = 'NO'
ШАГ 2:
Скопировать результаты в новый оператор SQL и выполнить. Потенциальный выглядеть как Field1|| Chr(44)||Field2|| Chr(44)||Field3
SELECT <results>
FROM YOURTABLE;
, который приведет запятыми список значений в 1 столбце для всех строк YOURTABLE
Если длина всех столбцов (наряду с, пространством и | |) будет превышать 4000 символов разрешено ... мы можем использовать тип CLOB данных вместо того, чтобы за счет использования объектов XML ...
* Заменить шаг 1 с *
SELECT RTRIM(XMLAGG(XMLELEMENT(Column_ID,Column_Name,'|| Chr(44)||').extract('//text()') order by Column_ID).GetClobVal(),'|| Chr(44)||') fields
FROM all_tab_Cols
WHERE table_name = 'YOURTABLENAME'
and owner = 'YOUROWNER'
--Perhaps exclude system columns
and Virtual_Column = 'NO';
Синтаксис для вышеуказанного присваивается This Oracle thread, но обновлен для ваших нужд.
проблема, у меня есть 400 столбцов, что-то вроде этого SELECT LISTAGG (*, '||, ||')? – razzek
Вы попробовали? Шаг 1 выбирает ВСЕ не виртуальные столбцы из указанной таблицы. шаг 2, затем выбирает все 400 столбцов и объединяет их. Все, что вам нужно сделать, это изменить YOURTABLE и YOUROWNER на схему и таблицу, запустив ее, возьмите результаты и вставьте в 2-й запрос на шаге 2, заменив
или вы получаете строку concat слишком длинную ошибку? 'ORA-01489: результат конкатенации строки слишком длинный 01489. 00000 -« результат конкатенации строки слишком длинный » * Причина: результат конкатенации строк больше максимального. * Действие: убедитесь, что результат меньше максимального. ' – xQbert
просим пометить ваши dbms. –
это похоже на оракул? и кажется, что вы не конкретизируете строки ... похоже, вы хотите объединить столбцы, чтобы вернуть 1 столбец со многими строками? если это не так, отправьте образцы данных и ожидаемые результаты. – xQbert
, если вы используете db2 или oracle, посмотрите на функцию LISTAGG(). – Hogan