IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Import/Export Oracle Discussion :

[INVESTIGATION] Comment exporter en CSV proprement sans espace comme Excel? [11g]


Sujet :

Import/Export Oracle

  1. #1
    Membre chevronné
    Profil pro
    MOA
    Inscrit en
    Décembre 2002
    Messages
    1 016
    Détails du profil
    Informations personnelles :
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : MOA

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 016
    Points : 1 772
    Points
    1 772
    Par défaut [INVESTIGATION] Comment exporter en CSV proprement sans espace comme Excel?
    hello tout le monde,


    J'aimerai faire des sripts d'export SQPL Plus (à moins que Toad permette d'exporter dans un fichier directement sans afficher bêtement).

    Lorsque j'utilise SQL Plus, j'ai bêtement des espaces sur certains champs comme le gars sur le post :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        TABLE_PRIVILEGE_MAP           ,SYSTEM                        
        SYSTEM_PRIVILEGE_MAP          ,SYSTEM                        
        STMT_AUDIT_OPTION_MAP         ,SYSTEM                        
        DUAL                          ,SYSTEM 
    ...
    http://stackoverflow.com/questions/6...-using-sqlplus

    Je loin d'être le seul. Il envisageait meme d'utiliser sed pour reformater. Etant sous Windows, ce n'est pas envisageable; peut être à la rigeur Notepadd++ à l'extrème rigueur si je n'arriverai jamais à obtenir un simple :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    valeur_champs1;valeur_champs2;valeur_champs3;12/12/2003;2;44555445;totot
    et pas


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    valeur_champs1;valeur_champs2                         ;valeur_champs3                  ;12/12/2003;2;44555445;totot

    Je suis en train donc de faire mes petites recherches à gauche et à droite d'exemple d'en tête, ici dur DVP et ailleurs
    J'en ai un peu marre de ne jamais obtenir un bon fichier csv avec sqlplus, je vais donc investiguer sur les commandes une par une.

    Voici la premère entete que je prends comme exemple du 1er lien juste au dessus :

    set colsep ; -- separate columns with a comma
    set pagesize 0 -- No header rows
    set trimspool on -- remove trailing blanks
    set headsep ";" -- this may or may not be useful...depends on your headings.
    set linesize X -- X should be the sum of the column widths
    set numw X -- X should be the length you want for numbers (avoid scientific notation on IDs)


    set pagesize 0
    => pour ne rien afficher à chaque top de page.

    SET NEWP[AGE] {1|n|NONE}

    SET NEWPAGE is not supported in iSQL*Plus

    Sets the number of blank lines to be printed from the top of each page to the top title. A value of zero places a formfeed at the beginning of each page (including the first page) and clears the screen on most terminals. If you set NEWPAGE to NONE, SQL*Plus does not print a blank line or formfeed between the report pages.

    set trimspool on
    => pour supprimer quelques espaces mais je vois pas trop ou.
    SET TRIMS[POOL] {ON|OFF}

    SET TRIMSPOOL is not supported in iSQL*Plus
    Determines whether SQL*Plus allows trailing blanks at the end of each spooled line. ON removes blanks at the end of each line. OFF allows SQL*Plus to include trailing blanks. TRIMSPOOL ON does not affect terminal output.

    set headsep ";"
    => opérateur de séparation entre chaque champs



    set linesize X
    => je ne sais pas trop quoi mettre. Il s'agirait de la largeur de l'affichage, or je ne peux pas connaitre précisement. J'ai des champs avec du textes qui peuvent contenter 10 caractères et d'autres 200 caractères.
    Ce qui est dit, c'est que cela définit la largeur de chaque colonne proportionnellement plus petite ou plus grande. Si je mets une valeur trop grande, j'ai peur d'avoir des espaces du coup!!!
    To control the width of the data displayed, use the SET LINESIZE command.

    Columns output for the DESCRIBE command are typically allocated a proportion of the linesize currently specified. Decreasing or increasing the linesize with the SET LINESIZE command usually makes each column proportionally smaller or larger. This may give unexpected text wrapping in your display. For more information, see the SET command later in this chapter.
    set numw X
    => il semblerait que ce soit pour l'affichage des nombres. Je ne pense pas que ce soit très utile enfin de compte.
    SQL*Plus formats NUMBER data right-justified. A NUMBER column's width equals the width of the heading or the width of the FORMAT plus one space for the sign, whichever is greater. If you do not explicitly use FORMAT, then the column's width will always be at least the value of SET NUMWIDTH.

    ma source : https://docs.oracle.com/cd/B10501_01...90842/ch13.htm


    Autre entête que j'ai appercu sur dvp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    set serveroutput on
    set termout off
    set echo off
    set linesize 1000
    set pagesize 100000
    set newpage none
    set feedback off
    set heading off
    set headsep off
    set trimspool on
    spool off
    spool SHOKAI.20150101
    http://www.developpez.net/forums/d14...itation-spool/


    set serveroutput on
    => j'ai du mal à comprendre l'interêt de cette commande pour du pure export. Je crois que c'est plus pour affiche du texte en live en PL/SQL


    set termout off
    => pratique pour éviter d'afficher le résultat de la requete dans la console et uniquement directement dans le fichier.
    https://www.safaribooksonline.com/li...7469/re85.html

    set newpage none
    =>
    NONE
    Causes SQL*Plus to do nothing at all when a page break occurs. You'll get no blank lines and no formfeed.
    https://www.safaribooksonline.com/li...7469/re76.html

    Je dois prendre le train, je vais continuer mon investigation un peu plus tard. Je pense que cela va aider égalent pas mal de monde qui ne cherche qu'un simple export tout bête comme le fait très bien excel (pour citer un exemple). J'imagine que c'est une demande récurrente.

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Je ne connais pas Toad mais je pense qu'il devrait avoir cette option.
    Sinon sql developer de chez Oracle peut le faire via le "hint" csv en plus d'avoir une option via le menu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select /*csv*/ * from emp
    Lisez aussi "How Can I unload data to a flat file"
    Et le nouveau outil de type sqlplus de chez Oracle: SQLcL le fait aussi.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2013
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Je vais reprendre cette discussion, car je n'ai pas non plus trouvé comment appliquer le formatage des colonnes dans un fichier spool type CSV.
    J'ai essayé les mêmes options de mise en page sans succès.
    J'ai réussi à formater les colonnes via la commande column xxx format Axx, mais cela ne permet pas d'obtenir le format souhaité.
    Les colonnes sont bien tronquées à xx caractères, mais ajoute des espaces si le nombre de caractères est moins important que xx.
    J'ai essayé le trim sur les valeurs des colonnes, sans résultat.
    Quelqu'un sait-il comment faire pour obtenir le ; juste après le dernier caractère (de manière simple, sans un développement de 500 lignes) ?

    Et tout ça bien sûr dans sqlplus, pour pouvoir exécuter la commande via un .bat sous Windows.

    Merci.

  4. #4
    Membre confirmé
    Homme Profil pro
    xxxxxxxxx
    Inscrit en
    Avril 2015
    Messages
    392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : xxxxxxxxx

    Informations forums :
    Inscription : Avril 2015
    Messages : 392
    Points : 552
    Points
    552
    Par défaut
    Pour faire suite à ta demande, tu peux regarder cet
    exemple ci dessous :
    https://chartio.com/resources/tutori...acle-sql-plus/

    Bonne chance

  5. #5
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2013
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Pas d'infos supplémentaire par rapport aux précédents messages.
    Cette mise en forme n'est peut-être pas possible, tout simplement.

    J'ai un point supplémentaire, dans les différents champs extraits, l'un d'entre eux est au format CLOB.
    Les valeurs de ce champs peuvent être sur plusieurs lignes.
    le soucis est que cela génère des lignes supplémentaires décalées dans le CSV ne comportant pas toutes les colonnes de base.
    ex:
    valeur1.1; valeur2.1; valeur3.1;valeur4.1.ligne1;valeur5.1;...
    ;;;valeur4.1.ligne2;;...
    ;;;valeur4.1.ligne3;;...
    valeur1.2;valeur2.2;valeur3.2;valeur4.2;valeur5.2;...
    Le résultat attendu serait du type
    valeur1.1; valeur2.1; valeur3.1;valeur4.1.ligne1+valeur4.1.ligne2+valeur4.1.ligne3;valeur5.1;...
    valeur1.2;valeur2.2;valeur3.2;valeur4.2;valeur5.2;...
    Est-il possible de résoudre cette anomalie ?

  6. #6
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2013
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    J'ai résolu mon pb de ligne multiple en utilisant la fonction replace.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select replace(mon_attribut,chr(13)||chr(10),' ') "Commentaire" from matable where ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Possible d'exporter en CSV directement sans afficher
    Par weed dans le forum Sql Developer
    Réponses: 1
    Dernier message: 22/01/2016, 15h13
  2. [XL-2007] Comment exporter un CSV, avec séparateur ',' à partir d'un XLS ?
    Par yo_haha dans le forum Excel
    Réponses: 5
    Dernier message: 27/11/2014, 10h24
  3. Réponses: 1
    Dernier message: 22/02/2010, 20h19
  4. Réponses: 9
    Dernier message: 27/12/2008, 17h09
  5. Réponses: 3
    Dernier message: 24/03/2006, 10h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo