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 Oracle Discussion :

Coupure de champs textes après extraction


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 5
    Par défaut Coupure de champs textes après extraction
    Bonjour,

    Je possède un compte Oracle en lecture seule.

    J'extrais les données de la base avec un Spool pour créer un fichier TXT.

    A l'extraction des données de la base avec l'outil SQL Plus, les "Retours chariots" Chr$(13) et les "Sauts de ligne" Chr$(10) présents dans les champs textes génèrent des interruptions de lignes dans les champs.

    Je souhaiterais les remplacer par un Pipe '|' dans mon fichier TXT pour conserver l'intégrité des enregistrements.

    Est-ce réalisable ?

  2. #2
    Membre Expert Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Par défaut
    Citation Envoyé par Ghaisse Voir le message
    Est-ce réalisable ?
    oui

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 21
    Par défaut
    au diable l'avarice et les avaricieux!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    spool result.txt
     
    select champ1||'|'||champ2 from table
     
    spool off
    faut parfois formater les champs de type date ou de type number.

    cdlt,

  4. #4
    Membre Expert
    Femme Profil pro
    Data engineer
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Data engineer
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Par défaut
    Bonjour,

    Citation Envoyé par Ghaisse Voir le message
    ...
    A l'extraction des données de la base avec l'outil SQL Plus, les "Retours chariots" Chr$(13) et les "Sauts de ligne" Chr$(10) présents dans les champs textes génèrent des interruptions de lignes dans les champs.
    ...
    La fonction TRANSLATE permet de remplacer caractère par caractère dans une chaîne.
    Par exemple, si un champ COLONNE contient les caractères chr(10) ou chr(13), on peut les remplacer par le select suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT TRANSLATE (COLONNE, chr(10) || chr(13), '||')...

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 5
    Par défaut
    Bonjour à tous et merci pour vos réponses.

    j'ai testé les solutions proposées et je me suis documenté sur les fonctions concernées. Il me semble que TRANSLATE est la plus appropriée dans mon cas.
    Mais, Ô rage ! ô désespoir ! Ça ne fonctionne pas.
    Peut être un problème de syntaxe !?

    Voici mon select dans lequel je concatène mes 2 champs N° de boite et contenu de la boite, avec séparateur ( et délimiteur de champ (") :
    select no de boite||'";"'||TRANSLATE (champ qui comporte les Chr10 et 13, chr(10), '|')||'"'

    Voici ce que j'obtiens :
    "BOITE1";"RAPPORTS 2006
    26 SEPTEMBRE 2006
    24 OCTOBRE 2006"
    "BOITE2";"RAPPORTS 2007

    28 novembre 2007
    20 décembre 2007"

    Je devrais obtenir 2 lignes : une pour la boite 1 et une pour la boite 2.

    Qu'en pensez-vous ?

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Avec Oracle sous Windows le saut de ligne est la concaténation des caractères 13 puis 10 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select chr(13) || chr(10) from dual
    Sous Unix ce n'est que chr(10).

    Translate remplace les caractères de la chaîne un par un.
    Si vous faites translate(col, 'ab', 'AB'), tous les a sont remplacés par A, tous les b par des B.
    Du coup, vous ne pouvez pas utiliser translate avec une concaténation.

    Essayez avec la fonction replace comme l'a suggéré ojo77.

  7. #7
    Membre Expert
    Femme Profil pro
    Data engineer
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Data engineer
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Par défaut
    Bonjour,

    La fonction TRANSLATE permet de régler le problème, il faut juste lui donner les bons paramètres.

    J'avais mis les deux caractères fautifs (10 et 13) dans le SELECT que je proposais, ce qui permettait de remplacer indifféremment l'un, l'autre ou les deux par un pipe. Pour que ça fonctionne, il aurait fallut reprendre ce que j'avais posté, et on aurait eu deux pipe à la place d'un retour à la ligne.

    On peut aussi affiner, la fonction TRANSLATE permettant d'éliminer des caractères si on ne fournit pas de correspondance.
    Par exemple,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TRANSLATE('12345abcde', 'A123456790', 'A') FROM dual
    permet d'éliminer les chiffres et d'obtenir 'abcde' comme résultat.

    Dans notre cas, il suffit, pour n'avoir qu'un pipe au lieu de deux, de remplacer le caractère 13 par un pipe et le caractère 10 par rien, ce qui peut s'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TRANSLATE (COLONNE, chr(13) || chr(10), '|')...

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 5
    Par défaut
    Bonjour,

    La solution proposée par Tedo01 "SELECT TRANSLATE (COLONNE, chr(13) || chr(10), '|')..." fonctionne à merveille.

    Tedo01, mea culpa. J'aurais du effectivement reprendre l'expression telle que vous l'aviez donnée au départ.

    Je vous remercie tous pour votre aide précieuse.

    Bien cordialement.

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

Discussions similaires

  1. Champs texte après checkbox
    Par pitite dans le forum Zend Framework
    Réponses: 1
    Dernier message: 23/04/2013, 04h56
  2. [AC-2003] Afficher un champ texte après activation d'une case à cocher
    Par olivier777 dans le forum IHM
    Réponses: 10
    Dernier message: 05/03/2010, 15h02
  3. [DOM] recuperer champ texte apres httprequest ..
    Par maxos75 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 14/01/2008, 23h36
  4. garder les valeurs d'un champs texte après ajout d'autres
    Par ke2007 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/09/2007, 09h28
  5. Réponses: 1
    Dernier message: 15/03/2007, 20h37

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