Przypuszczam, że problem polega na tym, jak złożona jest Twoja „złożona struktura”?
Programistyczne IDE, takie jak Oracle SQL Developer lub Quest TOAD, mają kreatory do eksportowania tabeli danych do plików CSV.
Jeśli chcesz połączyć dane z wielu tabel, możesz użyć widoku, a nawet napisać instrukcję SQL
select e.ename||','||d.dname
from emp e
join dept d on ( e.deptno = d.deptno )
/
(pamiętając, że kolumny mogą często zawierać dane zawierające przecinki, więc możesz użyć bardziej nietypowego znaku - lub zestawu znaków - jako separatora).
Innym szybkim sposobem na zrobienie czegoś jest użycie funkcji raportowania HTML SQL*Plus. Wiele narzędzi do arkuszy kalkulacyjnych może bez problemu importować dobrze ustrukturyzowany kod HTML i XML. Dowiedz się więcej.
Jeśli chcesz spłaszczyć strukturę hierarchiczną lub coś jeszcze bardziej zawiłego, prawdopodobnie będziesz musiał przejść do PL/SQL. W podejściu ręcznym wykorzystano by wariant powyższego stwierdzenia dostosowany do użycia 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;
Jeśli chcesz wyeksportować konkretnie do Excela (tj. Plik .XLS), musisz wyjść poza wbudowane rozwiązania Oracle. Typowym rozwiązaniem do eksportowania bezpośrednio z PL/SQL do Excela jest opakowanie OWA_SYLK Toma Kyte'a dla interfejsu API SYLK. Dowiedz się więcej.
Działa to z pojedynczymi arkuszami. Jeśli chcesz wyeksportować do wielu arkuszy roboczych, istnieje kilka alternatywnych rozwiązań.
Sanjeev Sapre ma swój pakiet get_xl_xml. Jak sama nazwa wskazuje, do przeprowadzenia transformacji używa XML. Dowiedz się więcej.
Jason Bennett napisał obiekt PL/SQL, który generuje dokument Excel XML. Dowiedz się więcej.