Suppongo che il problema sia, quanto è complessa la tua "struttura complessa"?
Gli IDE di programmazione come Oracle SQL Developer o Quest TOAD dispongono di procedure guidate per esportare tabelle di dati in file CSV.
Se vuoi unire i dati di più tabelle puoi usare una vista o anche scrivere un'istruzione SQL
select e.ename||','||d.dname
from emp e
join dept d on ( e.deptno = d.deptno )
/
(ricordando che le colonne possono spesso contenere dati che includono virgole, quindi potresti voler utilizzare un carattere più insolito - o un insieme di caratteri - come separatore.)
Un altro modo rapido per fare qualcosa è usare la funzione di report HTML di SQL*Plus. Molti strumenti per fogli di calcolo possono importare HTML e XML ben strutturati senza uno snatch. Scopri di più.
Se vuoi appiattire una struttura gerarchica o qualcosa di ancora più contorto, probabilmente dovrai spostarti in PL/SQL. Un approccio manuale utilizzerebbe una variante dell'istruzione precedente adattata per utilizzare 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;
Se desideri esportare in modo specifico in Excel (ad esempio un file .XLS), dovrai andare oltre i built-in di Oracle. La solita soluzione per esportare direttamente da PL/SQL a Excel è il wrapper OWA_SYLK di Tom Kyte per l'API SYLK. Scopri di più.
Funziona con fogli di lavoro singoli. Se desideri esportare su più fogli di lavoro, ci sono un paio di soluzioni alternative.
Sanjeev Sapre ha il suo pacchetto get_xl_xml. Come suggerisce il nome, utilizza XML per intraprendere la trasformazione. Scopri di più.
Jason Bennett ha scritto un oggetto PL/SQL che genera un documento XML Excel. Scopri di più.