Je suppose que le problème est, à quel point votre "structure complexe" est-elle complexe ?
Les IDE de programmation tels qu'Oracle SQL Developer ou Quest TOAD disposent d'assistants pour exporter la table de données vers des fichiers CSV.
Si vous souhaitez joindre des données de plusieurs tables, vous pouvez utiliser une vue ou même écrire une instruction SQL
select e.ename||','||d.dname
from emp e
join dept d on ( e.deptno = d.deptno )
/
(souvenez-vous que les colonnes peuvent souvent contenir des données qui incluent des virgules, vous pouvez donc utiliser un caractère plus inhabituel - ou un ensemble de caractères - comme séparateur.)
Une autre façon rapide de faire quelque chose est d'utiliser la fonction de rapport HTML de SQL*Plus. De nombreux outils de feuille de calcul peuvent importer du HTML et du XML bien structurés sans accroc. En savoir plus.
Si vous souhaitez aplanir une structure hiérarchique ou quelque chose d'encore plus compliqué, vous devrez probablement passer au PL/SQL. Une approche manuelle utiliserait une variante de l'instruction ci-dessus adaptée pour utiliser 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;
Si vous souhaitez exporter spécifiquement vers Excel (c'est-à-dire un fichier .XLS), vous devrez aller au-delà des fonctionnalités intégrées d'Oracle. La solution habituelle pour exporter directement de PL/SQL vers Excel est le wrapper OWA_SYLK de Tom Kyte pour l'API SYLK. En savoir plus.
Cela fonctionne avec des feuilles de calcul simples. Si vous souhaitez exporter vers plusieurs feuilles de calcul, il existe plusieurs solutions alternatives.
Sanjeev Sapre a son paquet get_xl_xml. Comme son nom l'indique, il utilise XML pour entreprendre la transformation. En savoir plus.
Jason Bennett a écrit un objet PL/SQL qui génère un document Excel XML. En savoir plus.