Supongo que el problema es, ¿qué tan compleja es tu "estructura compleja"?
Los IDE de programación como Oracle SQL Developer o Quest TOAD tienen asistentes para exportar tablas de datos a archivos CSV.
Si desea unir datos de varias tablas, puede usar una vista o incluso escribir una instrucción SQL
select e.ename||','||d.dname
from emp e
join dept d on ( e.deptno = d.deptno )
/
(recuerde que las columnas a menudo pueden contener datos que incluyen comas, por lo que es posible que desee utilizar un carácter más inusual, o un conjunto de caracteres, como separador).
Otra forma rápida de hacer algo es usar la función de informes HTML de SQL*Plus. Muchas herramientas de hojas de cálculo pueden importar HTML y XML bien estructurados sin problemas. Obtenga más información.
Si desea aplanar una estructura jerárquica o algo aún más intrincado, probablemente deba pasar a PL/SQL. Un enfoque hecho a mano usaría una variante de la declaración anterior ajustada para usar 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 desea exportar específicamente a Excel (es decir, un archivo .XLS), deberá ir más allá de las funciones integradas de Oracle. La solución habitual para exportar directamente de PL/SQL a Excel es el contenedor OWA_SYLK de Tom Kyte para la API SYLK. Obtenga más información.
Esto funciona con hojas de cálculo individuales. Si desea exportar a varias hojas de trabajo, hay un par de soluciones alternativas.
Sanjeev Sapre tiene su paquete get_xl_xml. Como sugiere el nombre, utiliza XML para llevar a cabo la transformación. Saber más.
Jason Bennett ha escrito un objeto PL/SQL que genera un documento XML de Excel. Obtenga más información.