sql >> Databasteknik >  >> RDS >> Oracle

Hur man exporterar frågeresultat till en CSV-fil i SQLcl (Oracle)

Om du använder SQLcl för att köra frågor mot Oracle Database kan du använda SPOOL kommando för att exportera dina frågeresultat till en CSV-fil.

Exempel

Här är ett exempel som exporterar en hel tabell:

SET SQLFORMAT csv
SPOOL '/Users/barney/data/countries.csv';
SELECT * FROM countries;
SPOOL off;
SET SQLFORMAT ansiconsole

Så här gjorde den rad för rad:

  1. Min första rad ställer in SQLFORMAT till csv . Detta säkerställer att utgången faktiskt är kommaseparerad. Om jag inte gjorde det här kan jag få en fil med en .csv tillägg, men med innehåll som inte är kommaseparerat.
  2. Den andra raden är där vi använder SPOOL kommando för att ange var utdatafilen ska skrivas. Se till att ändra /Users/barney/data/countries.csv del till en plats på ditt system.
  3. På den tredje raden körde jag SQL-frågan – resultaten för vilka jag exporterar. I det här fallet exporterade jag hela countries tabell.
  4. Nästa vände jag till SPOOL av.
  5. Äntligen avslutade jag med att ställa in SQLFORMAT tillbaka till ansiconsole (vilket var vad jag använde innan jag ställde in den till csv ).

Så här ser den resulterande filen ut:

"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. 

Ta bort kolumnrubriker

Du kan ta bort kolumnrubrikerna med 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

Resultat:

"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. 

I det här fallet vände jag till HEADINGS på igen efter att jag exporterat filen.

Ta bort feedback

Du kan ta bort X rows selected med 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

Resultat:

"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

Här vände jag till FEEDBACK igen efter att ha exporterat filen.

Flera tabeller

I det här exemplet exporterar jag resultaten av en lite mer komplex fråga som förenar två tabeller:

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

Resultatfil:

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"

Lägg till resultaten

Som standard, SPOOL använder REPLACE , som ersätter filen om den redan finns.

Däremot kan vi använda APPEND argument för att lägga till resultaten till filen.

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

Resultatfil:

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"

Det här exemplet lade till resultaten till filen som skapades (och fylldes i) i föregående exempel.


  1. SQL SERVER 2016 – Jämföra exekveringsplaner

  2. SQL-serverprestandastatistik för att ligga steget före i spelet

  3. Att nå 2100 parametergränsen (SQL Server) när du använder Contains()

  4. RENSA SKÄRM - Genväg för Oracle SQL-utvecklare?