Comment exporter le résultat d'une requête vers CSV dans Oracle SQL Developer?

240

J'utilise Oracle SQL Developer 3.0. Essayer de comprendre comment exporter un résultat de requête dans un fichier texte (de préférence CSV). Un clic droit sur la fenêtre des résultats de la requête ne me donne aucune option d'exportation.

Ken Liu
la source

Réponses:

376

Version que j'utilise

texte alternatif

Mise à jour du 5 mai 2012

Jeff Smith a blogué montrant ce que je crois être la meilleure méthode pour obtenir la sortie CSV de SQL Developer. La méthode de Jeff est présentée comme la méthode 1 ci-dessous:

Méthode 1

Ajoutez le commentaire /*csv*/à votre requête SQL et exécutez la requête en tant que script (à l'aide de F5 ou du 2e bouton d'exécution de la barre d'outils de la feuille de calcul)

entrez la description de l'image ici

C'est tout.

Méthode 2

Lancer une requête

texte alternatif

Faites un clic droit et sélectionnez décharger.

Mettre à jour. Dans Sql Developer version 3.0.04, le déchargement a été modifié pour l'exportation Merci à Janis Peisenieks de l'avoir signalé

texte alternatif

Capture d'écran révisée pour SQL Developer version 3.0.04

entrez la description de l'image ici

Dans le menu déroulant de format, sélectionnez CSV

texte alternatif

Et suivez le reste des instructions à l'écran.

Ian Carpenter
la source
25
+1. Le terme «décharger» me semble anti-intuitif. «Charger» certaines données signifie les insérer dans la base de données; donc "Décharger" devrait signifier que les données sont supprimées ...
Jeffrey Kemp
8
Dans la version 3.0.04, cette option a été renommée Exporter.
Janis Peisenieks
2
Génial. ps majuscule /*CSV*/n'a pas fonctionné pour moi, mais minuscule /*csv*/a fonctionné. Merci!
Eran Medan
3
Notez également que la méthode 2 peut rencontrer un bogue (toujours présent dans ma version 3.0.04) où elle se bloque simplement avec un grand nombre de lignes (environ 3 000 lignes). J'utilise cette ancienne école SQLPLUS car je n'ai pas vu la méthode 1 ci-dessus d'abord, mais certains peuvent aimer ceci: {code} SET UNDERLINE OFF SET COLSEP ',' SET LINES 20000 PAGES 20000 SET FEEDBACK off --optional SET HEADING off Spool C: \ Export \ EMP.csv --Maintenant, la requête SELECT * FROM EMP; Spool OFF
Jim P
1
@topr Utilisez la méthode 1, puis sélectionnez tout, copiez et collez dans un éditeur de texte et enregistrez-le au format csv. Vous pourrez peut-être même coller directement dans Excel, mais je n'en suis pas sûr.
Travis
45

Pas exactement "exporter", mais vous pouvez sélectionner les lignes (ou Ctrl- Apour les sélectionner toutes) dans la grille que vous souhaitez exporter, puis copier avec Ctrl- C.

La valeur par défaut est délimitée par des tabulations. Vous pouvez coller cela dans Excel ou un autre éditeur et manipuler les délimiteurs comme vous le souhaitez.

De plus, si vous utilisez Ctrl- Shift- Cau lieu de Ctrl- C, vous copiez également les en-têtes de colonne.

BQ.
la source
5
génial, je cherchais spécifiquement sur la façon de copier les en-têtes. Merci!
mishkin
3
Le seul problème, si vous avez beaucoup de lignes, cela signifie qu'il devra interroger à nouveau l'ensemble de données. et s'il s'agit d'une requête longue, cela signifie que vous attendez beaucoup pour la première page, puis attendez beaucoup pour toutes les pages après avoir appuyé sur ctrl + A. en d'autres termes, une excellente solution, mais ne fonctionne que la plupart du temps, et pour des requêtes relativement plus rapides ou plus petites.
Eran Medan
Sur un long nombre de lignes, il supprimera vos fichiers copiés! Ne l'utilisez pas.
Hash
@Mark Je n'ai jamais vu cela se produire moi-même. Est-ce qu'il n'a gardé que les 50 premières lignes ou quelque chose comme ça? Si c'est le cas, il y a une préférence distincte pour cela. Il copie uniquement ce qui se trouve actuellement dans la grille, mais si vous faites défiler vers le bas de la grille, SQL Dev récupérera automatiquement plus de lignes, donc je peux voir comment quelqu'un pourrait interpréter cela comme un bogue.
BQ.
1
J'ai essayé de le faire sur 43 000 lignes de données et cela fonctionne pour toujours - l'option d'exportation est plus rapide. C'est génial si vous n'avez que quelques lignes de données.
izikandrw
28

Pour info, vous pouvez également remplacer le /*csv*/ pour d'autres formats, y compris /*xml*/et /*html*/. select /*xml*/ * from empretournerait un document xml avec les résultats de la requête par exemple. Je suis tombé sur cet article en cherchant un moyen simple de retourner du xml à partir d'une requête.

Yves Rochon
la source
4
/ * insert * / est particulièrement utile.
jeremyjjbrown
Où vont les fichiers?
Anomalie
Ah, tant pis, j'ai survolé la partie "exécuter comme script", ne réalisant pas que c'était différent du bouton d'exécution habituel.
Anomalie
4

Pour info à tous ceux qui rencontrent des problèmes, il y a un bug dans l'exportation d'horodatage CSV que je viens de passer quelques heures à contourner. Certains champs que j'avais besoin d'exporter étaient de type horodatage. Il semble que l'option d'exportation CSV même dans la version actuelle (3.0.04 à partir de cette publication) ne parvienne pas à placer les symboles de regroupement autour des horodatages. Très frustrant car les espaces dans les horodatages ont cassé mon importation. La meilleure solution de contournement que j'ai trouvée était d'écrire ma requête avec un TO_CHAR () sur tous mes horodatages, ce qui donne la sortie correcte, mais avec un peu plus de travail. J'espère que cela fera gagner du temps à quelqu'un ou mettra Oracle sur la balle avec leur prochaine version.

BoeroBoy
la source
1
Ma version 3.0.04 a toujours un bug où il se bloque juste avec des exportations plus importantes (le mien est 3K lignes). Ma solution simple a été d'utiliser SQLPLUS à la place:
Jim P
Dans mon cas, le type de données spatiales ( docs.oracle.com/cd/B19306_01/appdev.102/b14255/… ) était exporté comme ceci (notez les virgules) MDSYS.SDO_GEOMETRY(2001,8307,MDSYS.SDO_POINT_TYPE(-122.39096,37.79251,NULL),NULL,NULL)sans être entouré de guillemets. Et j'utilise du SQL dynamique donc je ne peux pas TO_CHAR () ces colonnes. Aucune suggestion?
The Red Pea
Même si j'utilise Dynamic SQL et que je sélectionne simplement *, (et je ne veux pas le modifier pour une exception pour une seule colonne SQL de types de données spatiaux), je pourrais peut-être essayer deux choses: 1) Utiliser un COLSEP différent comme '|', ou 2) Avant l'instruction SELECT, spécifiez comment cette colonne doit être formatée à l'aide de docs.oracle.com/cd/B19306_01/server.102/b14357/ch12013.htm
The Red Pea
2

Pour effectuer une exportation vers votre système local à partir du développeur sql.

Path : C:\Source_Table_Extract\des_loan_due_dtls_src_boaf.csv

    SPOOL "Path where you want to save the file"
    SELECT /*csv*/ * FROM TABLE_NAME;
Arpan Saini
la source
1

L'exportation CSV n'échappe pas à vos données. Faites attention aux chaînes qui se terminent \parce que le résultat \"ressemblera à un échappé "et non à un \. Ensuite, vous avez le mauvais nombre de "et votre ligne entière est cassée.

John
la source
Ce n'est probablement pas un bug - vous pouvez décider comment les guillemets sont échappés, et la valeur par défaut est de l'échapper avec un autre caractère de guillemet, pas une barre oblique inverse. Dans ce cas, "foo\"est une chaîne entre guillemets parfaitement valide.
Ken Williams
C'est assez simple pour remplacer chaque occurrence de \ par \\, si vous le savez à l'avance. Merci!
jpaugh
Oui, assez simple et probablement faux pour la plupart des outils d'importation CSV.
Wormbo