Nếu bạn đang sử dụng SQLcl để chạy các truy vấn đối với Cơ sở dữ liệu Oracle, thì bạn có thể sử dụng SPOOL
để xuất kết quả truy vấn của bạn sang tệp CSV.
Ví dụ
Dưới đây là một ví dụ xuất toàn bộ bảng:
SET SQLFORMAT csv
SPOOL '/Users/barney/data/countries.csv';
SELECT * FROM countries;
SPOOL off;
SET SQLFORMAT ansiconsole
Đây là những gì nó đã làm, từng dòng một:
- Dòng đầu tiên của tôi đặt
SQLFORMAT
tớicsv
. Điều này đảm bảo rằng đầu ra thực sự được phân tách bằng dấu phẩy. Nếu tôi không làm điều này, tôi có thể kết thúc bằng một tệp có.csv
nhưng với nội dung không được phân tách bằng dấu phẩy. - Dòng thứ hai là nơi chúng tôi sử dụng
SPOOL
lệnh để chỉ định nơi tệp đầu ra sẽ được ghi. Đảm bảo thay đổi/Users/barney/data/countries.csv
một vị trí trên hệ thống của bạn. - Trên dòng thứ ba, tôi đã chạy truy vấn SQL - kết quả mà tôi đang xuất. Trong trường hợp này, tôi đã xuất toàn bộ
countries
bảng. - Tiếp theo, tôi đã chuyển
SPOOL
tắt. - Cuối cùng, tôi đã hoàn thành bằng cách đặt
SQLFORMAT
quay lạiansiconsole
(đó là những gì tôi đã sử dụng trước khi đặt nó thànhcsv
).
Đây là tệp kết quả trông như thế nào:
"COUNTRY_ID","COUNTRY_NAME","REGION_ID" "AR","Argentina",2 "AU","Australia",3 "BE","Belgium",1 "BR","Brazil",2 "CA","Canada",2 "CH","Switzerland",1 "CN","China",3 "DE","Germany",1 "DK","Denmark",1 "EG","Egypt",4 "FR","France",1 "HK","HongKong",3 "IL","Israel",4 "IN","India",3 "IT","Italy",1 "JP","Japan",3 "KW","Kuwait",4 "MX","Mexico",2 "NG","Nigeria",4 "NL","Netherlands",1 "SG","Singapore",3 "UK","United Kingdom",1 "US","United States of America",2 "ZM","Zambia",4 "ZW","Zimbabwe",4 25 rows selected.
Xóa tiêu đề cột
Bạn có thể xóa tiêu đề cột bằng cách tắt SET HEADING off
:
SET SQLFORMAT csv
SET HEADING off
SPOOL '/Users/barney/data/countries.csv';
SELECT * FROM countries;
SPOOL off;
SET SQLFORMAT ansiconsole
SET HEADING on
Kết quả:
"AR","Argentina",2 "AU","Australia",3 "BE","Belgium",1 "BR","Brazil",2 "CA","Canada",2 "CH","Switzerland",1 "CN","China",3 "DE","Germany",1 "DK","Denmark",1 "EG","Egypt",4 "FR","France",1 "HK","HongKong",3 "IL","Israel",4 "IN","India",3 "IT","Italy",1 "JP","Japan",3 "KW","Kuwait",4 "MX","Mexico",2 "NG","Nigeria",4 "NL","Netherlands",1 "SG","Singapore",3 "UK","United Kingdom",1 "US","United States of America",2 "ZM","Zambia",4 "ZW","Zimbabwe",4 25 rows selected.
Trong trường hợp này, tôi đã chuyển HEADINGS
trở lại sau khi tôi xuất tệp.
Xóa phản hồi
Bạn có thể xóa X rows selected
khi tắt SET FEEDBACK off
:
SET SQLFORMAT csv
SET HEADING off
SET FEEDBACK off
SPOOL '/Users/barney/data/countries.csv';
SELECT * FROM countries;
SPOOL off;
SET SQLFORMAT ansiconsole
SET HEADING on
SET FEEDBACK on
Kết quả:
"AR","Argentina",2 "AU","Australia",3 "BE","Belgium",1 "BR","Brazil",2 "CA","Canada",2 "CH","Switzerland",1 "CN","China",3 "DE","Germany",1 "DK","Denmark",1 "EG","Egypt",4 "FR","France",1 "HK","HongKong",3 "IL","Israel",4 "IN","India",3 "IT","Italy",1 "JP","Japan",3 "KW","Kuwait",4 "MX","Mexico",2 "NG","Nigeria",4 "NL","Netherlands",1 "SG","Singapore",3 "UK","United Kingdom",1 "US","United States of America",2 "ZM","Zambia",4 "ZW","Zimbabwe",4
Tại đây, tôi đã quay FEEDBACK
quay lại sau khi xuất tệp.
Nhiều bảng
Trong ví dụ này, tôi xuất kết quả của một truy vấn phức tạp hơn một chút kết hợp hai bảng:
SET SQLFORMAT csv
SET HEADING off
SET FEEDBACK off
SPOOL '/Users/barney/data/employees_jobs.csv';
SELECT
e.employee_id,
e.first_name,
e.last_name,
e.salary,
j.job_title
FROM employees e
INNER JOIN jobs j
ON e.job_id = j.job_id
WHERE e.salary BETWEEN 12000 AND 15000
ORDER BY SALARY DESC;
SPOOL off;
SET SQLFORMAT ansiconsole
SET HEADING on
SET FEEDBACK on
Tệp kết quả:
145,"John","Russell",14000,"Sales Manager" 146,"Karen","Partners",13500,"Sales Manager" 201,"Michael","Hartstein",13000,"Marketing Manager" 147,"Alberto","Errazuriz",12000,"Sales Manager" 205,"Shelley","Higgins",12000,"Accounting Manager" 108,"Nancy","Greenberg",12000,"Finance Manager"
Nối kết quả
Theo mặc định, SPOOL
sử dụng REPLACE
, sẽ thay thế tệp nếu nó đã tồn tại.
Tuy nhiên, chúng tôi có thể sử dụng APPEND
đối số để nối kết quả vào tệp.
SET SQLFORMAT csv
SET HEADING off
SET FEEDBACK off
SPOOL '/Users/barney/data/employees_jobs.csv' APPEND;
SELECT
e.employee_id,
e.first_name,
e.last_name,
e.salary,
j.job_title
FROM employees e
INNER JOIN jobs j
ON e.job_id = j.job_id
WHERE e.salary BETWEEN 11000 AND 11999
ORDER BY SALARY DESC;
SPOOL off;
SET SQLFORMAT ansiconsole
SET HEADING on
SET FEEDBACK on
Tệp kết quả:
145,"John","Russell",14000,"Sales Manager" 146,"Karen","Partners",13500,"Sales Manager" 201,"Michael","Hartstein",13000,"Marketing Manager" 147,"Alberto","Errazuriz",12000,"Sales Manager" 205,"Shelley","Higgins",12000,"Accounting Manager" 108,"Nancy","Greenberg",12000,"Finance Manager" 168,"Lisa","Ozer",11500,"Sales Representative" 174,"Ellen","Abel",11000,"Sales Representative" 114,"Den","Raphaely",11000,"Purchasing Manager" 148,"Gerald","Cambrault",11000,"Sales Manager"
Ví dụ này đã nối kết quả vào tệp đã được tạo (và được điền) trong ví dụ trước.