Pokud ke spouštění dotazů proti databázi Oracle používáte SQLcl, můžete použít SPOOL
export výsledků dotazu do souboru CSV.
Příklad
Zde je příklad exportu celé tabulky:
SET SQLFORMAT csv
SPOOL '/Users/barney/data/countries.csv';
SELECT * FROM countries;
SPOOL off;
SET SQLFORMAT ansiconsole
Tady je to, co to udělalo, řádek po řádku:
- Můj první řádek nastavuje
SQLFORMAT
docsv
. Tím je zajištěno, že výstup je ve skutečnosti oddělen čárkou. Pokud bych to neudělal, mohl bych skončit se souborem s.csv
rozšíření, ale s obsahem, který není oddělen čárkami. - Na druhém řádku používáme
SPOOL
příkaz k určení, kam bude výstupní soubor zapsán. Nezapomeňte změnit/Users/barney/data/countries.csv
část do umístění ve vašem systému. - Na třetím řádku jsem spustil SQL dotaz – výsledky, pro které exportuji. V tomto případě jsem exportoval celé
countries
stůl. - Dále jsem přešel na
SPOOL
vypnuto. - Nakonec jsem skončil nastavením
SQLFORMAT
zpět naansiconsole
(což jsem používal, než jsem to nastavil nacsv
).
Takto vypadá výsledný soubor:
"COUNTRY_ID","COUNTRY_NAME","REGION_ID""AR","Argentina",2"AU","Austrálie",3"BE","Belgie",1"BR","Brazílie",2 "CA","Kanada",2"CH","Švýcarsko",1"CN","Čína",3"DE","Německo",1"DK","Dánsko",1"EG"," Egypt",4"FR","Francie",1"HK","HongKong",3"IL","Izrael",4"IN","Indie",3"IT","Itálie",1" JP","Japonsko",3"KW","Kuvajt",4"MX","Mexiko",2"NG","Nigérie",4"NL","Nizozemsko",1"SG","Singapur ",3"UK","Spojené království",1"US","Spojené státy americké",2"ZM","Zambie",4"ZW","Zimbabwe",je vybráno 425 řádků.
Odstranit záhlaví sloupců
Záhlaví sloupců můžete odstranit pomocí 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
Výsledek:
"AR","Argentina",2"AU","Austrálie",3"BE","Belgie",1"BR","Brazílie",2"CA","Kanada",2"CH ","Švýcarsko",1"CN","Čína",3"DE","Německo",1"DK","Dánsko",1"EG","Egypt",4"FR","Francie" ,1"HK","HongKong",3"IL","Izrael",4"IN","Indie",3"IT","Itálie",1"JP","Japonsko",3"KW" "Kuvajt",4"MX","Mexiko",2"NG","Nigérie",4"NL","Nizozemsko",1"SG","Singapur",3"UK","Spojené království" ,1"US","Spojené státy americké",2"ZM","Zambie",4"ZW","Zimbabwe",je vybráno 425 řádků.
V tomto případě jsem otočil HEADINGS
znovu zapněte poté, co jsem soubor exportoval.
Odebrat zpětnou vazbu
Můžete odstranit X rows selected
s 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
Výsledek:
"AR","Argentina",2"AU","Austrálie",3"BE","Belgie",1"BR","Brazílie",2"CA","Kanada",2"CH ","Švýcarsko",1"CN","Čína",3"DE","Německo",1"DK","Dánsko",1"EG","Egypt",4"FR","Francie" ,1"HK","HongKong",3"IL","Izrael",4"IN","Indie",3"IT","Itálie",1"JP","Japonsko",3"KW" "Kuvajt",4"MX","Mexiko",2"NG","Nigérie",4"NL","Nizozemsko",1"SG","Singapur",3"UK","Spojené království" ,1"US","Spojené státy americké",2"ZM","Zambie",4"ZW","Zimbabwe",4
Zde jsem obrátil FEEDBACK
zpět po exportu souboru.
Více tabulek
V tomto příkladu exportuji výsledky trochu složitějšího dotazu, který spojuje dvě tabulky:
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
Výsledný soubor:
145,"John","Russell",14000,"Manažer prodeje"146,"Karen","Partners",13500,"Manažer prodeje"201,"Michael","Hartstein",13000,"Marketingový manažer "147,"Alberto","Errazuriz",12000,"Manažer prodeje"205,"Shelley","Higgins",12000,"Účetní manažer"108,"Nancy","Greenberg",12000,"Finanční manažer"Připojit výsledky
Ve výchozím nastavení
SPOOL
používáREPLACE
, který nahradí soubor, pokud již existuje.Můžeme však použít
APPEND
argument pro připojení výsledků k souboru.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
Výsledný soubor:
145,"John","Russell",14000,"Manažer prodeje"146,"Karen","Partners",13500,"Manažer prodeje"201,"Michael","Hartstein",13000,"Marketingový manažer "147,"Alberto","Errazuriz",12000,"Manažer prodeje"205,"Shelley","Higgins",12000,"Účetní manažer"108,"Nancy","Greenberg",12000,"Finanční manažer"168 "Lisa","Ozer",11500,"Obchodní zástupce"174,"Ellen","Abel",11000,"Obchodní zástupce"114,"Den","Raphaely",11000,"Manažer nákupu"148," Gerald","Cambrault",11000,"Manažer prodeje"Tento příklad připojil výsledky k souboru, který byl vytvořen (a naplněn) v předchozím příkladu.