Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cách xuất kết quả truy vấn sang tệp CSV trong SQLcl (Oracle)

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:

  1. Dòng đầu tiên của tôi đặt SQLFORMAT tới csv . Đ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.
  2. 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.
  3. 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.
  4. Tiếp theo, tôi đã chuyển SPOOL tắt.
  5. Cuối cùng, tôi đã hoàn thành bằng cách đặt SQLFORMAT quay lại ansiconsole (đó là những gì tôi đã sử dụng trước khi đặt nó thành csv ).

Đâ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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để sử dụng enums trong Oracle?

  2. Sử dụng IS NULL hoặc IS NOT NULL với các điều kiện tham gia - Câu hỏi lý thuyết

  3. Trục động trong sql oracle - Thủ tục

  4. Sử dụng Oracle JDeveloper 12c với Cơ sở dữ liệu Oracle 12c trên Nền tảng đám mây Oracle, Phần 3

  5. Bản ghi PLSQL trong Oracle là gì