Jag antar att problemet är, hur komplex är din "komplexa struktur"?
Programmerings-IDE:er som Oracle SQL Developer eller Quest TOAD har guider för att exportera datatabeller till CSV-filer.
Om du vill sammanfoga data från flera tabeller kan du använda en vy eller till och med skriva en SQL-sats
select e.ename||','||d.dname
from emp e
join dept d on ( e.deptno = d.deptno )
/
(kom ihåg att kolumner ofta kan innehålla data som inkluderar kommatecken, så du kanske vill använda ett mer ovanligt tecken - eller en uppsättning tecken - som avgränsare.)
Ett annat snabbt sätt att göra något är att använda SQL*Plus HTML-rapporteringsfunktion. Många kalkylarksverktyg kan importera välstrukturerad HTML och XML utan en nackdel. Ta reda på mer.
Om du vill platta till en hierarkisk struktur eller något ännu mer invecklat måste du förmodligen flytta till PL/SQL. Ett handrullat tillvägagångssätt skulle använda en variant av ovanstående uttalande anpassad för att använda 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;
Om du vill exportera specifikt till Excel (dvs. en .XLS-fil) måste du gå längre än Oracles inbyggda funktioner. Den vanliga lösningen för att exportera direkt från PL/SQL till Excel är Tom Kytes OWA_SYLK-omslag för SYLK-api. Ta reda på mer.
Detta fungerar med enstaka kalkylblad. Om du vill exportera till flera kalkylblad finns det ett par alternativa lösningar.
Sanjeev Sapre har sitt get_xl_xml-paket. Som namnet antyder använder den XML för att utföra omvandlingen. Få reda på mer.
Jason Bennett har skrivit ett PL/SQL-objekt som genererar ett Excel XML-dokument. Ta reda på mer.