Als u SQLcl gebruikt om query's uit te voeren op Oracle Database, dan kunt u de SPOOL
. gebruiken commando om uw zoekopdrachtresultaten naar een CSV-bestand te exporteren.
Voorbeeld
Hier is een voorbeeld dat een hele tabel exporteert:
SET SQLFORMAT csv
SPOOL '/Users/barney/data/countries.csv';
SELECT * FROM countries;
SPOOL off;
SET SQLFORMAT ansiconsole
Dit is wat het deed, regel voor regel:
- Mijn eerste regel stelt de
SQLFORMAT
. in naarcsv
. Dit zorgt ervoor dat de uitvoer daadwerkelijk door komma's wordt gescheiden. Als ik dit niet deed, zou ik een bestand kunnen krijgen met een.csv
extensie, maar met inhoud die niet door komma's is gescheiden. - De tweede regel is waar we de
SPOOL
. gebruiken commando om aan te geven waar het uitvoerbestand zal worden geschreven. Zorg ervoor dat u de/Users/barney/data/countries.csv
onderdeel naar een locatie op uw systeem. - Op de derde regel heb ik de SQL-query uitgevoerd - de resultaten waarvoor ik exporteer. In dit geval heb ik de hele
countries
geëxporteerd tafel. - Vervolgens draaide ik
SPOOL
uit. - Eindelijk ben ik klaar met het instellen van de
SQLFORMAT
terug naaransiconsole
(wat ik gebruikte voordat ik het instelde opcsv
).
Zo ziet het resulterende bestand eruit:
"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.
Kolomkoppen verwijderen
U kunt de kolomkoppen verwijderen met 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
Resultaat:
"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.
In dit geval veranderde ik HEADINGS
weer aan nadat ik het bestand heb geëxporteerd.
Feedback verwijderen
U kunt de X rows selected
met 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
Resultaat:
"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
Hier draaide ik FEEDBACK
weer aan na het exporteren van het bestand.
Meerdere tabellen
In dit voorbeeld exporteer ik de resultaten van een iets complexere query die twee tabellen verbindt:
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
Resulterend bestand:
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"
Voeg de resultaten toe
Standaard SPOOL
gebruikt REPLACE
, die het bestand vervangt als het al bestaat.
We kunnen echter de APPEND
. gebruiken argument om de resultaten aan het bestand toe te voegen.
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
Resulterend bestand:
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"
In dit voorbeeld zijn de resultaten toegevoegd aan het bestand dat in het vorige voorbeeld is gemaakt (en ingevuld).