2009-11-09 6 views
0

Je dois formater le fichier de sortie csv à partir d'une requête sqlplus. Les champs de sortie char et varchar apparaissent dans la taille de la colonne max dans la table, ce qui signifie que beaucoup de colonnes ont des espaces supplémentaires, plus la virgule séparatrice. Comment puis-je me débarrasser des espaces supplémentaires dans mon fichier csv? Comment puis-je obtenir "" autour des champs numériques?Format de sortie csv de sqlplus exécuté dans un script Unix

+0

Notez bien ce que vous demandez ici, mais un bon début serait d'inclure quelques exemples d'extraits de données. Passer de l'entrée à la sortie sur un flux de texte implique généralement un usage sédatif ou awk intéressant. Mais nous avons besoin de voir un exemple de ce que sqlplus génère et ce que vous voulez dans la sortie. Cela ressemble à un bon travail pour sed, awk, ou perl. –

Répondre

0

Vous pouvez vous débarrasser des principaux/espaces de fin en utilisant la fonction garniture:

http://www.adp-gmbh.ch/ora/sql/trim.html

SELECT TRIM(col) FROM table; 

Je ne sais pas pourquoi vous obtenez des guillemets autour des champs numériques: probablement quelque chose à voir avec la façon dont vous êtes concaténant des colonnes ensemble? Comme l'a demandé D.Shawley, il serait utile de publier ici un exemple de code SQL que vous utilisez pour générer votre fichier CSV.

2

Vous devrez concaténer les champs ensemble, et ajouter les guillemets vous-même. Aussi, n'oubliez pas d'échapper les guillemets doubles dans vos données. Les guillemets doubles ne sont pas strictement nécessaires sauf si vos données contiennent des virgules ou des guillemets, mais cela ne fait pas de mal de les ajouter.

SELECT '"' || numcol || '",', 
     '"' || REPLACE(strcol0, '"', '""') || '",', 
     '"' || REPLACE(strcol1, '"', '""') || '"' 
    FROM some_table; 

Avant d'exécuter ceci, vous voudrez probablement désactiver les en-têtes et les commentaires, puis les spouler dans un fichier.

SQL> set heading off 
SQL> set feedback off 
SQL> set pagesize 0 
SQL> spool output.csv 
SQL> SELECT ... FROM ...; 
SQL> spool off 
Questions connexes