250 votes

Comment exporter le résultat d'une requête au format csv dans Oracle SQL Developer ?

J'utilise Oracle SQL Developer 3.0. J'essaie de comprendre comment exporter le résultat d'une requête vers 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.

0 votes

386voto

Ian Carpenter Points 3568

Version que j'utilise

alt text

Mise à jour du 5 mai 2012

Jeff Smith a sur le blog qui montre ce que je crois être la meilleure méthode pour obtenir une sortie CSV à partir de SQL Developer. La méthode de Jeff est présentée comme Méthode 1 ci-dessous :

Méthode 1

Ajouter le commentaire /*csv*/ à votre requête SQL et exécutez la requête comme un script (en utilisant F5 ou le 2e bouton d'exécution de la barre d'outils de la feuille de calcul).

enter image description here

C'est tout.

Méthode 2

Exécuter une requête

alt text

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

Mise à jour. Dans la version 3.0.04 de Sql Developer, le déchargement a été changé en exportation. Merci à Janis Peisenieks de nous l'avoir signalé.

alt text

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

enter image description here

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

alt text

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

25 votes

+1. Le terme "Décharger" me semble anti-intuitif. Charger" des données signifie les insérer dans la base de données ; par conséquent, "Décharger" devrait signifier que les données sont supprimées...

8 votes

Dans la version 3.0.04, cette option a été renommée Export.

0 votes

@Janis - Merci, j'ai révisé ma réponse.

50voto

BQ. Points 3975

Ce n'est pas exactement de l'"exportation", mais vous pouvez sélectionner les rangées (ou Ctrl - A pour les sélectionner tous) dans la grille que vous souhaitez exporter, puis copiez avec Ctrl - C .

La valeur par défaut est délimitée par des tabulations. Vous pouvez coller ce fichier dans Excel ou un autre éditeur et manipuler les délimiteurs à votre guise.

De même, si vous utilisez Ctrl - Shift - C au lieu de Ctrl - C vous copierez également les en-têtes de colonne.

7 votes

Génial, je cherchais spécifiquement comment copier les en-têtes. merci !

3 votes

Le seul problème, c'est que si vous avez beaucoup de lignes, cela signifie qu'il faudra réinterroger l'ensemble des données. Et s'il s'agit d'une requête longue, cela signifie que vous devez attendre beaucoup pour la première page, puis attendre beaucoup pour toutes les pages après avoir appuyé sur ctrl+A. En d'autres termes, c'est une excellente solution, mais qui ne fonctionne que la plupart du temps, et pour des requêtes relativement rapides ou plus petites.

0 votes

Si le nombre de rangs est élevé, cela va dépouiller vos copies ! Ne l'utilisez pas.

29voto

Yves Rochon Points 158

Pour info, vous pouvez remplacer le /*csv*/ pour d'autres formats également, notamment /*xml*/ et /*html*/ . sélectionnez /*xml*/ * from emp renverrait un document xml avec les résultats de la requête par exemple. Je suis tombé sur cet article alors que je cherchais un moyen simple de renvoyer un document xml à partir d'une requête.

4 votes

/*insert*/ est particulièrement utile.

1 votes

Où vont les dossiers ?

0 votes

Ah, ça ne fait rien, j'ai oublié la partie "exécuter comme script", sans réaliser que c'était différent du bouton d'exécution habituel.

6voto

BoeroBoy Points 289

Pour info, si vous rencontrez des problèmes, il y a un bogue dans l'exportation d'horodatage CSV que je viens de contourner pendant quelques heures. Certains champs que je devais exporter étaient de type timestamp. Il semble que l'option d'exportation CSV, même dans la version actuelle (3.0.04 au moment de la publication de cet article), ne parvient pas à placer les symboles de regroupement autour des horodatages. C'est très frustrant car les espaces dans les horodatages ont interrompu mon importation. La meilleure solution que j'ai trouvée a été d'écrire ma requête avec un TO_CHAR() sur tous mes horodatages, ce qui donne le résultat correct, même si cela demande un peu plus de travail. J'espère que cela permettra à quelqu'un de gagner du temps ou à Oracle de se mettre au travail avec sa prochaine version.

1 votes

Ma version 3.0.04 présente toujours un bogue qui la bloque avec les exportations plus importantes (la mienne compte 3 000 lignes). Ma solution simple a été d'utiliser SQLPLUS à la place :

0 votes

Dans mon cas, le type de données spatiales ( docs.oracle.com/cd/B19306_01/appdev.102/b14255/… ) ont été exportés comme ceci (remarquez les virgules) MDSYS.SDO_GEOMETRY(2001,8307,MDSYS.SDO_POINT_TYPE(-122.39096‌​,37.79251,NULL),NULL‌​,NULL) sans être mis entre guillemets. Et comme j'utilise du SQL dynamique, je ne peux pas utiliser TO_CHAR() pour ces colonnes. Avez-vous des suggestions ?

0 votes

Même si j'utilise Dynamic SQL et que je ne fais que sélectionner *, (et que je ne veux pas modifier cela pour une exception pour une seule colonne SQL de types de données spatiales), je pourrais peut-être essayer deux choses : 1) Utiliser un COLSEP différent comme '|', ou 2) Avant l'instruction SELECT, spécifier comment cette colonne doit être formatée en utilisant docs.oracle.com/cd/B19306_01/server.102/b14357/ch12013.htm

1voto

John Points 1

L'exportation CSV n'échappe pas à vos données. Faites attention aux chaînes de caractères qui se terminent par \ car le résultat \" ressemblera à une échappée " et non un \ . Alors vous avez le mauvais nombre de " et votre rangée entière est cassée.

0 votes

Ce n'est probablement pas un bogue - vous pouvez décider de la façon dont les guillemets sont échappés, et le défaut est de les échapper avec un autre caractère de guillemet, pas un backslash. Dans ce cas, "foo\" est une chaîne entre guillemets parfaitement valide.

0 votes

Il est assez simple de remplacer toutes les occurrences de \ par \\ si vous en êtes informé à l'avance. Merci !

1 votes

Oui, c'est assez simple et probablement faux pour la plupart des outils d'importation CSV.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X