Se você estiver usando SQLcl para executar consultas no banco de dados Oracle, poderá usar o
SPOOL
comando para exportar os resultados da consulta para um arquivo CSV. Exemplo
Aqui está um exemplo que exporta uma tabela inteira:
SET SQLFORMAT csv
SPOOL '/Users/barney/data/countries.csv';
SELECT * FROM countries;
SPOOL off;
SET SQLFORMAT ansiconsole
Aqui está o que ele fez, linha por linha:
- Minha primeira linha define o
SQLFORMAT
paracsv
. Isso garante que a saída seja realmente separada por vírgulas. Se eu não fizesse isso, poderia acabar com um arquivo com um.csv
extensão, mas com conteúdo que não é separado por vírgulas. - A segunda linha é onde usamos o
SPOOL
comando para especificar onde o arquivo de saída será gravado. Certifique-se de alterar o/Users/barney/data/countries.csv
parte para um local em seu sistema. - Na terceira linha, executei a consulta SQL – os resultados para os quais estou exportando. Nesse caso, exportei todos os
countries
tabela. - Em seguida, virei
SPOOL
desligado. - Finalmente, finalizei configurando o
SQLFORMAT
de volta aoansiconsole
(que era o que eu estava usando antes de configurá-lo paracsv
).
Aqui está a aparência do arquivo resultante:
"COUNTRY_ID","COUNTRY_NAME","REGION_ID""AR","Argentina",2"AU","Austrália",3"BE","Bélgica",1"BR","Brasil",2 "CA","Canadá",2"CH","Suíça",1"CN","China",3"DE","Alemanha",1"DK","Dinamarca",1"EG"," Egito",4"FR","França",1"HK","Hong Kong",3"IL","Israel",4"IN","Índia",3"IT","Itália",1" JP","Japão",3"KW","Kuwait",4"MX","México",2"NG","Nigéria",4"NL","Holanda",1"SG","Singapura ",3"Reino Unido","Reino Unido",1"EUA","Estados Unidos da América",2"ZM","Zâmbia",4"ZW","Zimbabwe",425 linhas selecionadas.
Remover cabeçalhos de coluna
Você pode remover os cabeçalhos das colunas com
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
Resultado:
"AR","Argentina",2"AU","Austrália",3"BE","Bélgica",1"BR","Brasil",2"CA","Canadá",2"CH ","Suíça",1"CN","China",3"DE","Alemanha",1"DK","Dinamarca",1"EG","Egito",4"FR","França" ,1"HK","HongKong",3"IL","Israel",4"IN","Índia",3"IT","Itália",1"JP","Japão",3"KW" ,"Kuwait",4"MX","México",2"NG","Nigéria",4"NL","Holanda",1"SG","Cingapura",3"Reino Unido","Reino Unido" ,1"EUA","Estados Unidos da América",2"ZM","Zâmbia",4"ZW","Zimbabwe",425 linhas selecionadas.
Neste caso, eu virei
HEADINGS
novamente depois de exportar o arquivo. Remover comentários
Você pode remover o
X rows selected
com 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
Resultado:
"AR","Argentina",2"AU","Austrália",3"BE","Bélgica",1"BR","Brasil",2"CA","Canadá",2"CH ","Suíça",1"CN","China",3"DE","Alemanha",1"DK","Dinamarca",1"EG","Egito",4"FR","França" ,1"HK","HongKong",3"IL","Israel",4"IN","Índia",3"IT","Itália",1"JP","Japão",3"KW" ,"Kuwait",4"MX","México",2"NG","Nigéria",4"NL","Holanda",1"SG","Cingapura",3"Reino Unido","Reino Unido" ,1"EUA","Estados Unidos da América",2"ZM","Zâmbia",4"ZW","Zimbabwe",4
Aqui, eu virei
FEEDBACK
novamente após exportar o arquivo. Várias tabelas
Neste exemplo, exporto os resultados de uma consulta um pouco mais complexa que une duas tabelas:
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
Arquivo resultante:
145,"John","Russell",14000,"Gerente de Vendas"146,"Karen","Parceiros",13500,"Gerente de Vendas"201,"Michael","Hartstein",13000,"Gerente de Marketing "147,"Alberto","Errazuriz",12000,"Gerente de Vendas"205,"Shelley","Higgins",12000,"Gerente de Contabilidade"108,"Nancy","Greenberg",12000,"Gerente Financeiro"Anexar os resultados
Por padrão,SPOOL
usaREPLACE
, que substitui o arquivo se ele já existir.
No entanto, podemos usar oAPPEND
argumento para anexar os resultados ao arquivo.
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
Arquivo resultante:
145,"John","Russell",14000,"Gerente de Vendas"146,"Karen","Parceiros",13500,"Gerente de Vendas"201,"Michael","Hartstein",13000,"Gerente de Marketing "147,"Alberto","Errazuriz",12000,"Gerente de Vendas"205,"Shelley","Higgins",12000,"Gerente de Contabilidade"108,"Nancy","Greenberg",12000,"Gerente Financeiro"168 ,"Lisa","Ozer",11500,"Representante de Vendas"174,"Ellen","Abel",11000,"Representante de Vendas"114,"Den","Raphaely",11000,"Gerente de Compras"148," Gerald","Cambrault",11000,"Gerente de Vendas"
Este exemplo anexou os resultados ao arquivo que foi criado (e preenchido) no exemplo anterior.