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

Sql*Plus Oracle Discussion :

Génération de fichier .csv via une requête SQL


Sujet :

Sql*Plus Oracle

  1. #1
    Membre à l'essai
    Femme Profil pro
    requêteur sur base oracle avec SQL DEVELOPPER
    Inscrit en
    Avril 2022
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : requêteur sur base oracle avec SQL DEVELOPPER

    Informations forums :
    Inscription : Avril 2022
    Messages : 14
    Points : 14
    Points
    14
    Par défaut Génération de fichier .csv via une requête SQL
    Bonjour à tous.
    Je suis toute nouvelle dans ce forum, j'ai donc recherché en premier lieu des réponses à mon besoin et j'en ai trouvé.
    J'ai appliqué les conseils prodigués et cela fonctionne à un souci près : lé CSV généré semble en largeur fixe, complément avec des caractères blancs, alors que je n'ai rien précisé de ce style.
    J'ai bien utilisé le set colsep "|" que je retrouve bien entre 2 colonnes, exemple ci-dessous :
    |VPROM3 |IND | 2022
    Auriez-vous une solution pour être en longueur variable ?
    Je vous remercie par avance des retours que vous pourrez me faire.
    Bonne fin de journée à tous.

    Citation Envoyé par Pomalaix Voir le message
    Le SET COLSEP est fort utile pour générer un .CSV, puisqu'il permet de choisir le séparateur de colonnes, et donc un point-virgule si on le souhaite.

    Ainsi, en mettant ce qui suit dans "c:\temp\script.sql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    set colsep ";"
    set trimspool on
    set heading off
    set echo off
    set feedback off
    set pagesize 0
     
    spool c:\temp\resu.csv
    select * from scott.emp;
    spool off
    Puis en appelant ce script
    On obtient un fichier CSV parfaitement valable, sans avoir eu besoin de concaténer explicitement les différentes colonnes.

  2. #2
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 000
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 000
    Points : 2 501
    Points
    2 501
    Par défaut
    Tu as bien utilisé "set trimspool on" pour éliminer les espaces en blanc en trop qui donnent des lignes de longueur fixe?

  3. #3
    Membre à l'essai
    Femme Profil pro
    requêteur sur base oracle avec SQL DEVELOPPER
    Inscrit en
    Avril 2022
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : requêteur sur base oracle avec SQL DEVELOPPER

    Informations forums :
    Inscription : Avril 2022
    Messages : 14
    Points : 14
    Points
    14
    Par défaut set trimspool on
    Tout d'abord merci de ta réponse, oui j'ai bien posé cette instruction avant la génération du spool.

  4. #4
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 000
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 000
    Points : 2 501
    Points
    2 501
    Par défaut
    Si je comprends bien, tu obtiens "|VPROM3 |IND | 2022" dans ton fichier et tu voudrais "|VPROM3|IND|2022" c'est à dire enlever le caractère blanc dans les trois colonnes?
    Juste une question : les tois colonnes que tu sélectionnes, elles sont de quel type: varchar2, char...? Il suffi tde faire un desc sur ta table pour avoir cette info.
    Si tes colonnes sont de type CHAR, il te faudra faire un trim sur chaque colonne, comme trim(col1), pour enlever les espaces en trop pour chaque colonne.

  5. #5
    Membre à l'essai
    Femme Profil pro
    requêteur sur base oracle avec SQL DEVELOPPER
    Inscrit en
    Avril 2022
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : requêteur sur base oracle avec SQL DEVELOPPER

    Informations forums :
    Inscription : Avril 2022
    Messages : 14
    Points : 14
    Points
    14
    Par défaut Réponse sur le trim
    Oui toutes mes colonnes CHAR ont un trim.
    En fait dans sql dev, après exécution du sql en interactif je réalise un export en csv et tout est OK. C'est uniquement lorsque je passe par le script que les blancs s'ajoutent. Vraiment bizarre.

  6. #6
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 000
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 000
    Points : 2 501
    Points
    2 501
    Par défaut
    Effectivement c'est bizarre... j'avoue que je sèche...

    Quelle est la version de ta base Oracle?
    Si c'est au moins une 12.2, tu peux utiliser le code suivant
    https://stackoverflow.com/questions/...-using-sqlplus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set markup csv on
    spool myfile.csv

  7. #7
    Membre à l'essai
    Femme Profil pro
    requêteur sur base oracle avec SQL DEVELOPPER
    Inscrit en
    Avril 2022
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : requêteur sur base oracle avec SQL DEVELOPPER

    Informations forums :
    Inscription : Avril 2022
    Messages : 14
    Points : 14
    Points
    14
    Par défaut Nous nous approchons de la solution finale ...
    Un grand merci de ne vous être pas lassé et de poursuivre vos recherches et conseils !
    Les derniers améliorent la situation, j'ai suivi le lien fourni et j'obtiens mes colonnes sans espace, mais avec un séparateur ","

    J'ai beau utiliser SET COLSEP "|" ou bien SET MARKUP CSV ON DELIMITER "|", rien n'y fait, je conserve les ","

    Comme j'ai des montants avec ce symbole, il faudrait que j'arrive vraiment à forcer un autre caractère.

    Si je peux encore abuser ... Rerere merci ;-)

  8. #8
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 000
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 000
    Points : 2 501
    Points
    2 501
    Par défaut
    Si utiliser "set markup csv on" permet de résoudre le pb des espaces en trop, on va alors garder cette solution.

    Pour le nouveau pb, celui du caractère ",", merci de nous donner le SELECT que tu exécutes et on va essayer de remplacer la virgule en trop par |
    Avec le SELECT, mets nous quelques lignes du résultat obtenu et la version que tu voudrais avoir.

    Ici il y a des infos précises sur ton pb : https://docs.oracle.com/en/database/...3-AAA059CC7919

    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> SET MARKUP CSV ON QUOTE OFF 
    SQL> SELECT * FROM EMP;
     
    EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO
    7369,SMITH,CLERK,7902,17-DEC-80,800,,20
    Avec le paramètre DELIMITER à |, sans guillemet ni quote.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> SET MARKUP CSV ON DELIMITER | 
    SQL> SELECT * FROM EMP;
     
    EMPNO|ENAME|JOB|MGR|HIREDATE|SAL|COMM|DEPTNO
    7369|SMITH|CLERK|7902|17-DEC-80|800||20

  9. #9
    Membre à l'essai
    Femme Profil pro
    requêteur sur base oracle avec SQL DEVELOPPER
    Inscrit en
    Avril 2022
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : requêteur sur base oracle avec SQL DEVELOPPER

    Informations forums :
    Inscription : Avril 2022
    Messages : 14
    Points : 14
    Points
    14
    Par défaut Problème résolu
    Bonsoir,

    Je voudrais vraiment vous remercier tous de vos aides et conseils.
    A force de suivre les liens et de rechercher des compléments par moi-même j'ai trouvé l'instruction unique qui répond à mes besoins.

    Il suffit d'écrire la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET SQLFORMAT DELIMITED |
    Je vous souhaite une bonne fin de semaine et belle continuation à tous.

  10. #10
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 000
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 000
    Points : 2 501
    Points
    2 501
    Par défaut
    Eh ben, ce ne fut pas si simple que cela, mais nous y sommes arrivés :-)

Discussions similaires

  1. [LibreOffice][Base de données] Intégration d'un fichier texte en base de données via une requête SQL. Mac OS X
    Par comme de bien entendu dans le forum OpenOffice & LibreOffice
    Réponses: 1
    Dernier message: 07/01/2020, 17h10
  2. Génération fichier .csv via une requête SQL
    Par matnys dans le forum Import/Export
    Réponses: 5
    Dernier message: 12/12/2011, 22h03
  3. exportation de d'un fichier csv vers une table sql
    Par sanounatibibt dans le forum VB.NET
    Réponses: 3
    Dernier message: 02/01/2010, 16h59
  4. MAJ d'un fichier texte par une requête sql
    Par kayserfc dans le forum VB.NET
    Réponses: 2
    Dernier message: 24/12/2009, 08h39
  5. Récupurer via une requête SQL la valeur la plus proche
    Par yoda_style dans le forum Langage SQL
    Réponses: 9
    Dernier message: 27/04/2004, 13h52

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