Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment exporter les résultats d'une requête vers un fichier CSV dans SQLcl (Oracle)

Si vous utilisez SQLcl pour exécuter des requêtes sur Oracle Database, vous pouvez utiliser le SPOOL commande pour exporter les résultats de votre requête dans un fichier CSV.

Exemple

Voici un exemple qui exporte une table entière :

SET SQLFORMAT csv
SPOOL '/Users/barney/data/countries.csv';
SELECT * FROM countries;
SPOOL off;
SET SQLFORMAT ansiconsole 

Voici ce qu'il a fait, ligne par ligne :

  1. Ma première ligne définit le SQLFORMAT vers csv . Cela garantit que la sortie est réellement séparée par des virgules. Si je ne le faisais pas, je pourrais me retrouver avec un fichier avec un .csv extension, mais dont le contenu n'est pas séparé par des virgules.
  2. La deuxième ligne est l'endroit où nous utilisons le SPOOL commande pour spécifier où le fichier de sortie sera écrit. Assurez-vous de modifier le /Users/barney/data/countries.csv pièce à un emplacement sur votre système.
  3. Sur la troisième ligne, j'ai exécuté la requête SQL - les résultats pour lesquels j'exporte. Dans ce cas, j'ai exporté l'ensemble des countries tableau.
  4. Ensuite, j'ai tourné SPOOL éteint.
  5. Enfin, j'ai terminé en définissant le SQLFORMAT retour à ansiconsole (ce que j'utilisais avant de le définir sur csv ).

Voici à quoi ressemble le fichier résultant :

"COUNTRY_ID","COUNTRY_NAME","REGION_ID""AR","Argentine",2"AU","Australie",3"BE","Belgique",1"BR","Brésil",2 "CA","Canada",2"CH","Suisse",1"CN","Chine",3"DE","Allemagne",1"DK","Danemark",1"EG"," Égypte",4"FR","France",1"HK","HongKong",3"IL","Israël",4"IN","Inde",3"IT","Italie",1" JP","Japon",3"KW","Koweït",4"MX","Mexique",2"NG","Nigéria",4"NL","Pays-Bas",1"SG","Singapour ",3"UK","Royaume-Uni",1"US","États-Unis d'Amérique",2"ZM","Zambie",4"ZW","Zimbabwe",425 lignes sélectionnées. 

Supprimer les en-têtes de colonne

Vous pouvez supprimer les en-têtes de colonne avec 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 

Résultat :

"AR","Argentine",2"AU","Australie",3"BE","Belgique",1"BR","Brésil",2"CA","Canada",2"CH ","Suisse",1"CN","Chine",3"DE","Allemagne",1"DK","Danemark",1"EG","Egypte",4"FR","France" ,1"HK","HongKong",3"IL","Israël",4"IN","Inde",3"IT","Italie",1"JP","Japon",3"KW" ,"Koweït",4"MX","Mexique",2"NG","Nigéria",4"NL","Pays-Bas",1"SG","Singapour",3"UK","Royaume-Uni" ,1"US","États-Unis d'Amérique",2"ZM","Zambie",4"ZW","Zimbabwe",425 lignes sélectionnées. 

Dans ce cas, j'ai tourné HEADINGS après avoir exporté le fichier.

Supprimer les commentaires

Vous pouvez supprimer le X rows selected avec 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 

Résultat :

"AR","Argentine",2"AU","Australie",3"BE","Belgique",1"BR","Brésil",2"CA","Canada",2"CH ","Suisse",1"CN","Chine",3"DE","Allemagne",1"DK","Danemark",1"EG","Egypte",4"FR","France" ,1"HK","HongKong",3"IL","Israël",4"IN","Inde",3"IT","Italie",1"JP","Japon",3"KW" ,"Koweït",4"MX","Mexique",2"NG","Nigéria",4"NL","Pays-Bas",1"SG","Singapour",3"UK","Royaume-Uni" ,1"US","États-Unis d'Amérique",2"ZM","Zambie",4"ZW","Zimbabwe",4

Ici, j'ai activé FEEDBACK de nouveau après l'exportation du fichier.

Tableaux multiples

Dans cet exemple, j'exporte les résultats d'une requête un peu plus complexe qui joint deux tables :

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 

Fichier résultant :

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" 

Ajouter les résultats

Par défaut, SPOOL utilise REPLACE , qui remplace le fichier s'il existe déjà.

Cependant, nous pouvons utiliser le APPEND argument pour ajouter les résultats au fichier.

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 

Fichier résultant :

145,"John","Russell",14000,"Sales Manager"146,"Karen","Partners",13500,"Sales Manager"201,"Michael","Hartstein",13000,"Marketing Manager "147,"Alberto","Errazuriz",12000,"Responsable des ventes"205,"Shelley","Higgins",12000,"Responsable de la comptabilité"108,"Nancy","Greenberg",12000,"Responsable des finances"168 ,"Lisa","Ozer",11500,"Représentante des ventes"174,"Ellen","Abel",11000,"Représentante des ventes"114,"Den","Raphaely",11000,"Responsable des achats"148," Gérald","Cambrault",11000,"Responsable des ventes"

Cet exemple a ajouté les résultats au fichier qui a été créé (et rempli) dans l'exemple précédent.