Comment puis-je bobine à un fichier au format CSV à l'aide de SQLPLUS?
Je veux extraire certaines requêtes au format CSV. Malheureusement, je ne peux pas utiliser toute fantaisie SQL client ou de toute langue, de le faire. Je dois utiliser SQLPLUS.
Comment dois-je faire?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez également utiliser la suite, même si elle introduit des espaces entre les champs.
De sortie sera comme:
Ce serait beaucoup moins fastidieuse que de taper tous les champs et la concaténation avec les virgules. Vous pourrait faire le suivi avec un simple script sed pour supprimer l'espace avant une virgule, si vous vouliez.
Quelque chose comme ça pourrait fonctionner...(mon sed compétences sont très rouillés, ce qui aura probablement besoin de travailler)
set pagesize 1000
au lieu de 0. Dans mon commentaire précédent, vous ne pouvez pas rediriger vers le même fichier :cat myfile.csv | sed -e 's/[ \t]*|/|/g ; s/|[ ]*/|/g' > my_other_file.csv
.grep
ettr
comme cegrep -v -- ----- myfile.csv | tr -d [:blank:] > myfile.csv
.,
mais après ils ne sont pas d'être séparés. Je ne sais pas pourquoi!- Je utiliser cette commande pour les scripts qui extrait des données pour les tableaux des dimensions (DW). Donc, j'utilise la syntaxe suivante:
Et les œuvres. Je n'ai pas utiliser sed pour le format de fichier de sortie.
J'ai un problème similaire...
J'ai besoin de bobine de fichier CSV à partir de SQLPLUS, mais la sortie a 250 colonnes.
Ce que j'ai fait pour éviter ennuyeux SQLPLUS formatage de sortie:
le problème est que vous perdrez en-tête de colonne les noms...
vous pouvez ajouter ceci:
Je sais que c'est un peu hardcore, mais cela fonctionne pour moi...
||
pour la sous-requête trop?, je ne pense pas qu'il est nécessaire pour les sous-requêtes. mais oui, il est requis pour la sélection principal.select x
pour ? Cela devrait fonctionner sans elle. @davidb, vous avez raison, la concaténation n'est pas nécessaire dans la première sous-requête interne, mais l'aliasing toutes les colonnes col1, col2...etc. est nécessaire, il existe.Avec des versions plus récentes des outils clients, il existe plusieurs options pour le format de la sortie de la requête. Le reste est à la bobine dans un fichier ou enregistrer la sortie dans un fichier en fonction de l'outil client. Voici quelques-unes des façons:
À l'aide de SQL*Plus les commandes de format pour obtenir votre sortie désirée. Utilisation BOBINE à la bobine de la sortie vers un fichier.
Par exemple,
Sinon, vous pouvez utiliser la nouvelle
/*csv*/
soupçon dans SQL Developer.Par exemple, dans mon SQL Developer Version 3.2.20.10:
Maintenant, vous pouvez enregistrer la sortie dans un fichier.
Nouveau dans SQL Developer version 4.1, utilisez le code suivant juste comme sqlplus de commande et exécuter en tant que script. Pas besoin de l'indicateur dans la requête.
Maintenant, vous pouvez enregistrer la sortie dans un fichier.
Si vous utilisez 12.2, vous pouvez simplement dire
C'est brut, mais:
Je sais que c'est un vieux thread, cependant j'ai remarqué que personne n'a mentionné l'option de soulignement, qui peut enlever le soulignement sous les en-têtes de colonne.
Vous pouvez explicitement le format de la requête pour produire une chaîne délimitée avec quelque chose le long des lignes de:
Et configurer les options de sortie approprié. En option, le COLSEP variable sur SQLPlus vous permettra de produire des fichiers délimités, sans avoir à générer explicitement une chaîne de caractères avec les champs concaténées. Cependant, vous devrez placer des guillemets autour de cordes sur toutes les colonnes qui pourrait contiennent des virgules.
préfère utiliser "ensemble colsep" dans sqlplus invite au lieu de modifier le col de nom un par un. Utiliser sed pour éditer le fichier de sortie.
J'ai une fois écrit un peu de SQL*Plus de script qui utilise
dbms_sql
etdbms_output
pour créer un fichier csv (en fait un ssv). Vous pouvez le trouver sur mon githup référentiel.Utiliser vi ou vim pour écrire du sql, utilisez colsep avec un ctrl-A (en vi et vim précéder le ctrl-a avec Un ctrl-v). Assurez-vous de définir le linesize et pagesize à quelque chose de rationnel et de tourner sur trimspool et trimout.
spool vers un fichier.
Alors...
Que sed chose peut être transformé en un script. Le " *" avant et après le ctrl-Un serre tous les espaces inutiles. N'est-il pas grand qu'ils ont pris la peine d'activer la sortie html de sqlplus, mais PAS natif csv?????
Je le fais de cette façon car il gère les virgules dans les données. Je tourne à des points-virgules.
Vous devez être conscient que les valeurs de champs peuvent contenir des virgules et devis caractères, de sorte que certaines des réponses proposées ne fonctionnerait pas, comme le CSV fichier de sortie ne serait pas correct.
Pour remplacer les devis de caractères dans un champ, et le remplacer avec le double du devis de caractères, vous pouvez utiliser la fonction REMPLACER que oracle prévoit, pour changer un seul devis devis double.
Ou, si vous voulez l'apostrophe pour les champs:
trim()
est inutile.Il y a un problème à l'aide de sqlplus pour créer des fichiers csv. Si vous voulez que les en-têtes de colonne qu'une seule fois dans la sortie et il y a des milliers ou des millions de lignes, vous ne pouvez pas définir pagesize assez grosses pour ne pas obtenir un renouvellement.
La solution est de commencer avec pagesize = 50 et analyser les en-têtes, puis le problème de la sélectionner à nouveau avec pagesize = 0 pour obtenir les données. Voir bash script ci-dessous:
J'ai écrit ce purement SQLPlus script pour le vidage des tables CSV en 1994.
Comme indiqué dans les commentaires du script, quelqu'un à Oracle mettre mon script dans un Support d'Oracle note, mais sans mention de la source.
https://github.com/jkstill/oracle-script-lib/blob/master/sql/dump.sql
Le script crée également un fichier de contrôle et un fichier de paramètres de SQL*LOADER
Vous pouvez utiliser csv soupçon. Voir l'exemple suivant: