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 :

comma_to_table avec integer


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2004
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 189
    Par défaut comma_to_table avec integer
    bonjour
    comma_to_table marche ( permet d'extraire les données en tenant compte
    de la virgule)
    cela marche bien avec les strings mais pas
    avec les number par exemple si je fais
    chaine VARCHAR2(50) := '11,12,13' ;
    cela ne marche pas
    une solution ?
    merci

    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
     
     
    extraction chaine de caracteres pl/sql
     
    declare
      chaine      VARCHAR2(50) := 'val1,val2,val3' ;
      nbreElement BINARY_INTEGER ;
      tableau     DBMS_UTILITY.uncl_array ;
    begin
      dbms_utility.comma_to_table (chaine, nbreElement, tableau) ;
      dbms_output.put_line ('La chaîne contient ' || nbreElement || ' valeurs') ;
     FOR i IN tableau.first..tableau.last loop
      dbms_output.put_line (tableau(i)) ;
     end loop ;
     
      -- Ajout d'une nouvelle valeur
      tableau(nbreElement + 1) := 'nouvelle valeur' ;
      dbms_utility.table_to_comma (tableau, nbreElement, chaine) ;
      dbms_output.put_line (chaine) ;
    end ;

    --

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Il me semble l'avoir lu il y a quelques mois. Fais une recherche sur le forum.

    Solution : Code le à la main avec des substr et des instr

  3. #3
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    sALUT,

    Avec la 10g, tu peux utiliser la requête suivante :
    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
    37
    38
    39
    40
    41
    42
     
     
    SQL*Plus: Release 10.1.0.4.2 - Production on Mer. Avr. 22 09:18:18 2009
     
    Copyright (c) 1982, 2005, Oracle.  All rights reserved.
     
     
    Connecté à :
    Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
    With the Partitioning, OLAP and Data Mining options
     
    SQL> WITH T AS
      2   (SELECT  '11,12,13,14,15,16,17,18,19,20'        TXT
      3          FROM DUAL)
      4   SELECT    TXT
      5    FROM   T
      6     MODEL
      7      RETURN UPDATED ROWS
      8      PARTITION BY ( ROWNUM RN)
      9      DIMENSION BY (0 POSITION)
     10      MEASURES     (TXT ,NVL(LENGTH(REGEXP_REPLACE(TXT,'[^,]+','')),0)+1 NB_MOT)
     11      RULES
     12      (TXT[FOR POSITION FROM  1 TO NB_MOT[0] INCREMENT 1] =
     13       REGEXP_SUBSTR(TXT[0],'[^,]+',1,CV(POSITION)) )
     14  /
     
    TXT
    -----------------------------
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    10 ligne(s) sélectionnée(s).
     
    SQL>

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Par défaut
    Avec des substr et instr :

    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
    SELECT *
    FROM
    (
        SELECT CASE R 
            -- 1ere valeur
            WHEN 1 THEN 
                CASE WHEN INSTR(SUBSTR(chaine, R), separateur) > 0 -- Au moins 2 valeurs
                    THEN SUBSTR(chaine, R, INSTR(SUBSTR(chaine, R), separateur)-1) 
                ELSE SUBSTR(chaine, R) -- Une seule valeur
                END
            ELSE 
                CASE SUBSTR(chaine, R, 1) 
                WHEN separateur THEN 
                    CASE 
                    WHEN INSTR(SUBSTR(chaine, R+1), separateur) > 0 -- Valeur du milieu
                        THEN SUBSTR(chaine, R+1, INSTR(SUBSTR(chaine, R+1), separateur)-1)
                    ELSE SUBSTR(chaine, R+1) -- Derniere valeur
                    END
                ELSE NULL END
            END AS Resultat
        FROM
        (
            SELECT '11,12,13' AS chaine,
                ',' AS separateur,
                rownum AS R
            FROM USER_TABLES
        )
    )
    WHERE Resultat IS NOT NULL;
    Edit : si USER_TABLES ne contient pas assez de lignes, on peut utiliser ALL_OBJECTS par exemple.

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

Discussions similaires

  1. requete simple avec integer
    Par c+cool dans le forum Requêtes
    Réponses: 5
    Dernier message: 26/08/2009, 23h43
  2. [SCJP] code avec Integer.MIN_VALUE, pourquoi?
    Par k o D dans le forum Langage
    Réponses: 2
    Dernier message: 22/01/2009, 15h41
  3. Probleme avec Integer.parseint
    Par melek_net dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 21/11/2008, 19h24
  4. Type character avec integer'value
    Par julkido dans le forum Ada
    Réponses: 5
    Dernier message: 20/06/2007, 16h57

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