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

PL/SQL Oracle Discussion :

Construction d'un fichier CSV en utilisant PL/SQL


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 481
    Par défaut Construction d'un fichier CSV en utilisant PL/SQL
    Bonjour à tous,

    Je travaille actuellement sur un projet où j'ai une table de paramétrage (FICHIER_PARAM) et j'essaie de construire un fichier CSV en utilisant PL/SQL.
    J'ai besoin d'extraire les données depuis une autre TABLE TABLE_DONNE, et de les formater de manière ordonnée selon la colonne ORDRE et le paramétrage SEPARATION_AVANT, et FUSIONNER_PRECEDENT,

    Plus spécifiquement, si la valeur de FUSIONNER_PRECEDENT est égale à "O" (pour oui), je souhaite fusionner la donnée avec celle d'avant et les considérer comme une seule donnée. Un exemple concret serait de fusionner le NOM "MARC" avec le PRENOM "LEBEEAUBIEN" pour obtenir "MARC LE BEAUBIEN" comme un seul mot, et prendre en considération le Délimiteur de champ texte 'DELIMA_CH_TXT' et Séparateur de champ 'SEPARAT_CH' et Caractère de fin de ligne 'CARACT_FIN' qui sont aussi des colonne de paramétrage.

    Je me demandais si quelqu'un pourrait me guider sur la meilleure façon d'implémenter cela en utilisant PL/SQL. Si vous avez des suggestions, des exemples de code, ou des expériences similaires, je serais reconnaissant de les partager.

    Merci d'avance pour votre aide !

    Cordialement,

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 611
    Billets dans le blog
    10
    Par défaut
    La solution SQL est assez simple, par exemple (ici réalisé sous SQL serveur faute d'Oracle sous la main, mais le principe reste le même) :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    declare @concat char(1) ='O'
    declare @delim  char(1) =' '
    ;  
    with T1 (nom, prenom) as
        (select 'marc', 'le beaubien'      union all
         select 'sophie', 'fonfec'      
        )
    select nom
         , prenom
         , case when @concat='O' 
                then concat(nom, @delim, prenom) 
                else nom
           end as truc
    from T1

    Résultat :

    Nom : Sans titre.png
Affichages : 192
Taille : 2,2 Ko

    Mais, comment allez vous exploiter le résultat si la personne a pour prénom "jacques" et pour nom "martin xxxx", après concaténation, vous ne saurez plus si martin faisait partie du nom ou du prénom.

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 481
    Par défaut
    je vous remercie pour votre réponse,

    Cependant, la situation n'est pas aussi simple que vous l'imaginez, car le paramétrage est défini dans une autre table et plusieurs exemples de données peuvent coexister.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Nom----------PRENOM----------FUSION_AVANT?---
    Marc ---------le beaubien------- O
    Michel--------Antoine----------- N
    Galerie-------Lafayette---------  O
    Wassi--------Bonc------------- --N
    dans ce cas le résultat final pour un séparateur de champ qui est ; et un délimiteur champ ui est " on doit avoir :


    "Marc le beau bien";"Michel Antoine Galerie Lafayette";"Wassi Bonc"

    ici remarquez que Galerie Lafayette est fusionné avec Michel Antoine

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 611
    Billets dans le blog
    10
    Par défaut
    C'est sans doute possible avec les fonctions LAG() ou LEAD(), mais il faut connaître l'ordre à utiliser, sachant que parcourir une table sans critère de tri (sans ORDER BY donc) ne garantit en rien que le résultat soit reproductible.
    Donc, quel est le critère de tri ?
    Edit : question subsidiaire, peut il y avoir plus de deux lignes à concaténer successivement ?

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 481
    Par défaut
    jes récupérer les données en une seule ligne, donc ce qu'il me reste est de detecté s'il y a une fusion_précen ou pas

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/03/2020, 13h27
  2. Export en fichier CSV d'un select sql ?
    Par Devilstuff dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 17/01/2010, 15h05
  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. Réponses: 5
    Dernier message: 27/05/2008, 18h43
  5. [CSV] construction d'un fichier CSV
    Par max44410 dans le forum Langage
    Réponses: 3
    Dernier message: 14/06/2007, 10h04

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