Полагаю, проблема в том, насколько сложна ваша "сложная структура"?
В средах программирования, таких как Oracle SQL Developer или Quest TOAD, есть мастера для экспорта таблицы данных в файлы CSV.
Если вы хотите объединить данные из нескольких таблиц, вы можете использовать представление или даже написать оператор SQL
select e.ename||','||d.dname
from emp e
join dept d on ( e.deptno = d.deptno )
/
(помните, что столбцы часто могут содержать данные, содержащие запятые, поэтому вы можете использоватьболее необычный символ - или набор символов - в качестве разделителя.)
Еще один быстрый способ сделать что-либо - использовать функцию отчетов SQL * Plus HTML.Многие инструменты для работы с электронными таблицами могут импортировать хорошо структурированные HTML и XML без рывков. Узнайте больше.
Если вы хотите сгладить иерархическую структуру или что-то еще более запутанное, вам, вероятно, придется перейти на PL / SQL.Ручной подход будет использовать вариант приведенного выше выражения, приспособленный для использования UTL_FILE:
declare
csv_fh utl_file.filetype;
begin
csv_fh := utl_file.fopen('C:\temp', 'data_export.csv', 'W');
for r in ( select e.ename, d.dname
from emp e
join dept d on ( e.deptno = d.deptno )
) loop
utl_file.put_line(csv_fh, r.ename||'|'||r.dname;
end loop;
utl_file.fclose(csv_fh);
end;
Если вы хотите экспортировать данные специально в Excel (то есть файл .XLS), тогда вам нужно выйти за рамкиВстроенные Oracle.Обычным решением для экспорта напрямую из PL / SQL в Excel является оболочка OWA_SYLK Тома Кайта для API-интерфейса SYLK. Узнайте больше.
Работает с отдельными листами.Если вы хотите экспортировать в несколько листов, есть несколько альтернативных решений.
Санджив Сапре имеет свой пакет get_xl_xml.Как следует из названия, для преобразования используется XML. Узнайте больше .
Джейсон Беннетт написал объект PL / SQL, который генерирует документ Excel XML. Узнайте больше .