Tôi cho rằng vấn đề là, "cấu trúc phức tạp" của bạn phức tạp đến mức nào?
Các IDE lập trình như Oracle SQL Developer hoặc Quest TOAD có các trình hướng dẫn để xuất bảng dữ liệu sang tệp CSV.
Nếu bạn muốn kết hợp dữ liệu từ nhiều bảng, bạn có thể sử dụng dạng xem hoặc thậm chí viết câu lệnh SQL
select e.ename||','||d.dname
from emp e
join dept d on ( e.deptno = d.deptno )
/
(đánh số lại các cột thường có thể chứa dữ liệu bao gồm dấu phẩy, vì vậy bạn có thể muốn sử dụng một ký tự khác thường hơn - hoặc tập hợp các ký tự - làm dấu phân tách.)
Một cách nhanh chóng khác để làm điều đó là sử dụng chức năng báo cáo HTML của SQL * Plus. Nhiều công cụ bảng tính có thể nhập HTML và XML có cấu trúc tốt mà không gặp khó khăn. Tìm hiểu thêm.
Nếu bạn muốn làm phẳng một cấu trúc phân cấp hoặc một thứ gì đó phức tạp hơn nữa, bạn có thể cần phải chuyển sang PL / SQL. Phương pháp cuộn thủ công sẽ sử dụng một biến thể của câu lệnh trên được trang bị để sử dụng 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;
Nếu bạn muốn xuất cụ thể sang Excel (tức là tệp .XLS) thì bạn cần phải vượt ra ngoài các tích hợp sẵn của Oracle. Giải pháp thông thường để xuất thẳng từ PL / SQL sang Excel là trình bao bọc OWA_SYLK của Tom Kyte cho api SYLK. Tìm hiểu thêm.
Điều này hoạt động với các trang tính đơn lẻ. Nếu bạn muốn xuất sang nhiều trang tính, có một số giải pháp thay thế.
Sanjeev Sapre có gói get_xl_xml của anh ấy. Như tên cho thấy nó sử dụng XML để thực hiện chuyển đổi. Tìm hiểu thêm.
Jason Bennett đã viết một đối tượng PL / SQL tạo ra một tài liệu Excel XML. Tìm hiểu thêm.