Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como exportar os resultados da consulta para um arquivo CSV no SQLcl (Oracle)


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:
  1. Minha primeira linha define o SQLFORMAT para csv . 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.
  2. 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.
  3. Na terceira linha, executei a consulta SQL – os resultados para os quais estou exportando. Nesse caso, exportei todos os countries tabela.
  4. Em seguida, virei SPOOL desligado.
  5. Finalmente, finalizei configurando o SQLFORMAT de volta ao ansiconsole (que era o que eu estava usando antes de configurá-lo para csv ).

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 usa REPLACE , que substitui o arquivo se ele já existir.

No entanto, podemos usar o APPEND 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.