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 :

[Oracle 10.2g] Transformer une ligne en plusieurs


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2007
    Messages : 340
    Points : 350
    Points
    350
    Par défaut [Oracle 10.2g] Transformer une ligne en plusieurs
    Bonjour,

    Voici ma problèmatique :

    J'ai une table contenant un champ texte de 500 caractères, pour un import/export avec une autre base de données, je dois faire une vue qui transforme ces 500 caractères en plusieurs lignes de 50 caractères maxi.

    En gros, au départ j'ai ça

    1 | J'aime taper des commentaires qui ne servent à rien

    Et ma vue doit être de la forme (en limitant à 10 pour l'exemple) :

    1 | 1 | J'aime tape
    1 | 2 | r des comm
    1 | 3 | entaires q
    1 | 4 | ui ne serv
    1 | 5 | etc etc etc...

    Pour l'instant mon idée était de faire des SELECT SUBSTR pour les 10 tranches possibles et lier tout ça avec des UNION mais c'est pas ce qu'il y a de plus propres.

    Si vous avez une solution, je suis preneur !

    Merci

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    SQL> With data As
      2  (
      3    Select 1 id, 'J''aime taper des commentaires qui ne servent à rien' as com from dual union ALL
      4    Select 2 id, 'Et j''adore les pivots en SQL parce que c''est cool' as com from dual
      5  )
      6  Select id, x, SubStr(com,(x-1)*10+1,10)
      7    from data, (Select level as x from dual connect by level <= 10)
      8  order by id, x
      9  /
     
            ID          X SUBSTR(COM,(X-1)*10+1,10)
    ---------- ---------- -------------------------
             1          1 J'aime tap
             1          2 er des com
             1          3 mentaires
             1          4 qui ne ser
             1          5 vent à rie
             1          6 n
             1          7 
             1          8 
             1          9 
             1         10 
             2          1 Et j'adore
             2          2  les pivot
             2          3 s en SQL p
             2          4 arce que c
             2          5 'est cool
             2          6 
             2          7 
             2          8 
             2          9 
             2         10 
     
    20 rows selected

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 386
    Points
    18 386
    Par défaut
    J'aurai rajouté un "where substr(com,(x-1)*10+1,10) is not null" mnitu, mais jolie solution

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2007
    Messages : 340
    Points : 350
    Points
    350
    Par défaut
    Super ! Ca marche nickel

    Effectivement je zape les lignes vides comme l'a proposé Waldar.
    Néanmoins je l'ai fais différent

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LENGTH(DOS_COMMENTAIRE)>(x-1)*10
    Technique toute bête en fait, je ne connaissais pas cette technique pour générer un compteur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT level AS x FROM dual connect BY level <= 10
    C'est ça le principe du pivot ?

    Merci à vous 2

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

Discussions similaires

  1. Transformer une ligne en plusieurs lignes en XML
    Par cherif6com dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 20/01/2014, 13h56
  2. Copier une ligne dans plusieurs lignes de Matrice
    Par zicos dans le forum MATLAB
    Réponses: 3
    Dernier message: 22/05/2007, 10h28
  3. [Forms]Oracle 11i - Forms: colorer une ligne
    Par memed dans le forum Forms
    Réponses: 9
    Dernier message: 26/03/2007, 15h46
  4. Oracle 9i : Vérifier qu'une ligne existe
    Par Fatah93 dans le forum Oracle
    Réponses: 4
    Dernier message: 14/06/2005, 12h27
  5. Transformer une ligne en polygone
    Par bl4d3 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 02/09/2003, 09h35

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