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 :

select de string separée par 12 espaces


Sujet :

SQL Oracle

  1. #1
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut select de string separée par 12 espaces
    Salut a tous

    oracle 10GR2,linux rhel5

    J'ai une table avec un CLOB...dans ce clob il y a ceci comme données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DEM03223            DEM02216            DEM03914            DEM02708
    Donc je dois faire un select substr pour "attraper" chaque mot et les mettre dans une variable.
    Un autre problème c'est que chaque row n'a pas la même quantité de "mots" y'en a avec 2,3,4 ou 5
    Le résultat serait quelque chose comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    colone1    colone2      colone3    colone4   
    DEM03223 DEM02216  DEM03914 DEM02708
    Est ce possible?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Pourquoi mettre ces données dans un CLOB?
    Ce que vous décrivez est possible mais c'est loin d'être optimale comme façon de procéder.
    Le mieux (si c'est possible) est de revoir votre modèle de données.

  3. #3
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut
    Bonsoir
    mmm impossible vu que la base appartient à une entreprise tierce...Donc je n'ai pas le choix.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ldiaz Voir le message
    Bonsoir
    mmm impossible vu que la base appartient a une entreprise tierse...Donc j'ai pas le choix.
    Comme c'est souvent le cas, on fait avec les choses qu'on nous lègue...
    Bon courage à toi.

  5. #5
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut
    Salut

    j'ai fini par trouver ceci:


    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
    CREATE OR REPLACE FUNCTION Split15
    (
        cadena VARCHAR2,
        indice NUMBER
    ) RETURN VARCHAR2
    IS
        p_del VARCHAR2(12) := '            ';
        l_idx    PLS_INTEGER;
        l_list    VARCHAR2(4000) := cadena;
        l_value    VARCHAR2(1000);
        l_counter  NUMBER(2);
    BEGIN
        l_counter := 0;
        LOOP
            l_counter := l_counter + 1;
     
            l_idx := INSTR(l_list,p_del);
            IF l_idx > 0 THEN
                IF l_counter = indice THEN
                   RETURN SUBSTR(l_list,1,l_idx-1);
                   EXIT;
                END IF;
                l_list := SUBSTR(l_list,l_idx+LENGTH(p_del));
            ELSE
                IF l_counter = indice THEN
                RETURN l_list;
                END IF;
                EXIT;
            END IF;
        END LOOP;
        RETURN '';
    END Split15;
    /
    Alors ça marche bien que je dois obligé de mettre un split15 pour chaque element...donc c'est pas dynamique, mais ça marche...
    J'espere que ça profitera a la communauté

    Ciao et merci

  6. #6
    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
    Il y a trop de code dans la fonction split15. Et l'instruction EXIT après RETURN ne va jamais être exécutée. Essayez d'utiliser les fonctions des caractères en SQL ça va bien aider. Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    mni@DIANA> select id, replace(data,'            ',',')
      2    from t_clob
      3  /
     
            ID REPLACE(DATA,'',',')
    ---------- --------------------------------------------------------------------------------
             1 DEM03223,DEM02216,DEM03914,DEM02708,

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Novembre 2008
    Messages : 46
    Points : 60
    Points
    60
    Par défaut
    Bonjour,

    Ce n'est pas forcement la meilleur solution a ton probleme mais j'ai plusieurs fois trouve cette procedure utile et il s'inscrit dans la logique du post.

    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
    15
    16
    17
    18
    19
    20
    21
    22
     
    SET echo ON ;
    SET SERVEROUTPUT ON ;
    DECLARE
    a binary_integer ;
    arr_words dbms_utility.uncl_array ;
    BEGIN
       dbms_utility.comma_to_table('ce,sont,des,mots,separe,par,des,virgules', a, arr_words );
        FOR i IN 1 .. arr_words.COUNT LOOP
        DBMS_OUTPUT.PUT_LINE(TRIM(arr_words(i)));
      END LOOP;
    END;
    /
     
    ce
    sont
    des
    mots
    separe
    par
    des
    virgules

Discussions similaires

  1. Réponses: 9
    Dernier message: 03/03/2015, 10h17
  2. Selection d'une version par produit
    Par LaNat dans le forum Langage SQL
    Réponses: 12
    Dernier message: 09/06/2005, 08h19
  3. Réponses: 4
    Dernier message: 15/04/2005, 15h25
  4. Réponses: 4
    Dernier message: 24/01/2005, 15h50

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