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 :
- Ma première ligne définit le
SQLFORMAT
verscsv
. 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. - 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. - 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. - Ensuite, j'ai tourné
SPOOL
éteint. - Enfin, j'ai terminé en définissant le
SQLFORMAT
retour àansiconsole
(ce que j'utilisais avant de le définir surcsv
).
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
utiliseREPLACE
, 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.