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
SQLFORMATtilcsv. Dette sikrer, at output faktisk er kommasepareret. Hvis jeg ikke gjorde dette, kunne jeg ende med en fil med en.csvudvidelse, men med indhold, der ikke er kommasepareret. - Den anden linje er, hvor vi bruger
SPOOLkommando for at angive, hvor outputfilen skal skrives. Sørg for at ændre/Users/barney/data/countries.csvdel 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
countriestabel. - Derefter vendte jeg
SPOOLslukket. - Til sidst afsluttede jeg med at indstille
SQLFORMATtilbage 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.