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 split varchar


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2008
    Messages : 41
    Par défaut oracle split varchar
    Bonjour,

    Version oracle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Oracle DATABASE 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
    PL/SQL Release 10.2.0.3.0 - Production
    CORE	10.2.0.3.0	Production
    TNS FOR IBM/AIX RISC System/6000: Version 10.2.0.3.0 - Productio
    NLSRTL Version 10.2.0.3.0 - Production
    J'ai une table du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    champ1 | champ 2
    l1          |   x1,x2,x3
    l2          |   x3,x4
    l5          |   x5
    l5          |   x1,x4,x6,x7
    et je souhaiterais obtenir une vue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    champ1 | champ 2
    l1          |   x1
    l1          |   x2
    l1          |   x3
    l2          |   x3
    l2          |   x4
    l5          |   x5
    l5          |   x1
    l5          |   x4
    l5          |   x6
    l5          |   x7
    J'imagine qu'il faut utiliser une function de split ..

    D'avance merci pour votre aide

  2. #2
    Expert confirmé 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

  3. #3
    Membre très actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Par défaut
    Bonjour,

    Je pense qu'il te faut utilser Voici un lien traitant de ce sujet :
    http://forums.oracle.com/forums/thre...hreadID=958898

    ça doit donner un truc du genre, pas pu tester comme en ce moment je taf chez un client en 9i donc à confirmer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    WITH TEST
    AS
    (
    SELECT 'l1' AS ID    , 'x1,x2,x3' AS value   from dual UNION ALL
    SELECT 'l2'          , 'x3,x4'               from dual UNION ALL
    SELECT 'l1'          , 'x5'                  from dual UNION ALL
    SELECT 'l1'          , 'x1,x4,x6,x7'         from dual 
    )
        SELECT ID , REGEXP_SUBSTR (value , '[^,]+', 1, LEVEL) AS result    
        FROM   TEST    
        CONNECT BY LEVEL <= ( SELECT LENGTH (REPLACE (value , ',', NULL)) 
                                          FROM TEST)
    ;
    Cordialement.

  4. #4
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut !

    Ca marche pas pour la bonne raison que la gruge du CONNECT BY level, tu ne peux l'utiliser que pour dupliquer une seule ligne.
    A partir du moment où ta sélection initiale fait plus qu'une ligne, c'est mort.

    En plus, ce que tu as mis derrière le CONNECT BY level fait planter la requête (c'est un SELECT non corrélé : ça renvoie pleins de lignes et non pas un seul nombre)

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Une autre méthode se rapprochant de Integer Series Generator Method dans le lien proposé par mnitu mais ne nécessitant aucune création de TYPE :
    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
    36
    SQL> with t as (
    select 'l1' as c1, 'x1,x2,x3' as c2 from dual union all
    select 'l2'      , 'x3,x4'          from dual union all
    select 'l5'      , 'x5'             from dual union all
    select 'l5'      , 'x1,x4,x6,x7'    from dual
    )
    select t.c1, x.column_value as list_c2
      from t
     cross join table(
                  cast(multiset(
                           select substr( ','||c2||',',
                                          instr( ','||c2||',', ',', 1, rownum )+1,
                                          instr( ','||c2||',', ',', 1, rownum+1 )
                                                 -instr( ','||c2||',', ',', 1, rownum )-1
                                         )
                             from dual
                          connect by level <= length(c2)-length(replace(c2,',',''))+1
                                ) as sys.odcivarchar2list )
                        ) x;
     
    C1 LIST_
    -- -----
    l1 x1
    l1 x2
    l1 x3
    l2 x3
    l2 x4
    l5 x5
    l5 x1
    l5 x4
    l5 x6
    l5 x7
     
    10 rows selected.
     
    SQL>
    Merci Tom Kyte pour le bon timing du post (et pour tout le reste évidemment) :
    sorting by number

Discussions similaires

  1. [FORMS]oracle forms saisie de donnée varchar
    Par sethgreen dans le forum Forms
    Réponses: 1
    Dernier message: 31/05/2010, 09h28
  2. [Oracle 10g] pb de convertion de VarChar en Date
    Par mjolymelot dans le forum Oracle
    Réponses: 3
    Dernier message: 24/06/2006, 10h30
  3. [ADO.Net][C#/Oracle]Comment gérer OracleType.VarChar?
    Par el_poitevin dans le forum Accès aux données
    Réponses: 5
    Dernier message: 30/03/2006, 13h08
  4. Jdbc, Oracle et Long (varchar)
    Par frett dans le forum JDBC
    Réponses: 2
    Dernier message: 20/02/2006, 11h45

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