Предполагам, че проблемът е колко сложна е вашата "сложна структура"?
IDE за програмиране като Oracle SQL Developer или Quest TOAD имат съветници за експортиране на таблица с данни в CSV файлове.
Ако искате да обедините данни от множество таблици, можете да използвате изглед или дори да напишете SQL израз
select e.ename||','||d.dname
from emp e
join dept d on ( e.deptno = d.deptno )
/
(да не забравяме, че колоните често могат да съдържат данни, които включват запетаи, така че може да искате да използвате по-необичаен знак - или набор от знаци - като разделител.)
Друг бърз начин да направите нещо е да използвате HTML функцията за отчитане на SQL*Plus. Много инструменти за електронни таблици могат да импортират добре структуриран 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 обвивката на Tom Kyte за SYLK api. Научете повече.
Това работи с единични работни листове. Ако искате да експортирате в няколко работни листа, има няколко алтернативни решения.
Sanjeev Sapre има своя пакет get_xl_xml. Както подсказва името, той използва XML за извършване на трансформацията. Открийте повече.
Джейсън Бенет е написал PL/SQL обект, който генерира XML документ на Excel. Научете повече.