Hvis du bruger SQLcl til at køre forespørgsler mod Oracle Database, kan du bruge SPOOL
kommando for at eksportere dine forespørgselsresultater til en CSV-fil.
Eksempel
Her er et eksempel, der eksporterer en hel tabel:
SET SQLFORMAT csv
SPOOL '/Users/barney/data/countries.csv';
SELECT * FROM countries;
SPOOL off;
SET SQLFORMAT ansiconsole
Her er, hvad det gjorde, linje for linje:
- Min første linje indstiller
SQLFORMAT
tilcsv
. Dette sikrer, at output faktisk er kommasepareret. Hvis jeg ikke gjorde dette, kunne jeg ende med en fil med en.csv
udvidelse, men med indhold, der ikke er kommasepareret. - Den anden linje er, hvor vi bruger
SPOOL
kommando for at angive, hvor outputfilen skal skrives. Sørg for at ændre/Users/barney/data/countries.csv
del til en placering på dit system. - På den tredje linje kørte jeg SQL-forespørgslen – de resultater, som jeg eksporterer for. I dette tilfælde eksporterede jeg hele
countries
tabel. - Derefter vendte jeg
SPOOL
slukket. - Til sidst afsluttede jeg med at indstille
SQLFORMAT
tilbage tilansiconsole
(hvilket var det, jeg brugte, før jeg indstillede det tilcsv
).
Sådan ser den resulterende fil ud:
"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.
Fjern kolonneoverskrifter
Du kan fjerne kolonneoverskrifterne 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 dette tilfælde vendte jeg HEADINGS
igen efter jeg eksporterede filen.
Fjern feedback
Du kan fjerne 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
Her vendte jeg FEEDBACK
igen efter eksport af filen.
Flere tabeller
I dette eksempel eksporterer jeg resultaterne af en lidt mere kompleks forespørgsel, der forbinder to 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
Resulterende fil:
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"
Tilføj resultaterne
Som standard er SPOOL
bruger REPLACE
, som erstatter filen, hvis den allerede eksisterer.
Vi kan dog bruge koden APPEND
argument for at tilføje resultaterne til 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
Resulterende fil:
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"
Dette eksempel føjede resultaterne til den fil, der blev oprettet (og udfyldt) i det forrige eksempel.