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 :

Manipulation de chaines de caractères [10g]


Sujet :

PL/SQL Oracle

  1. #1
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2012
    Messages : 77
    Points : 85
    Points
    85
    Par défaut Manipulation de chaines de caractères
    Bonjour,

    Je souhaite remplir un champ dans une table en fonction du contenu d'un autre champ de cette même table, et le remplir tout en ajoutant des caractères.

    Par exemple, j'ai une table NOURRITURE dans laquelle j'ai un champs FRUIT. Je peux avoir comme valeur FRAISE, POIRE, POMME, ABRICOT ou tout ce que vous voulez.
    Et j'ai un champ CODEFRUIT (le nom est mal choisi, mais j'ai pas mieux là!) dans lequel je veux ajouter "1234" devant le contenu du champ FRUIT. Tout le temps le même code 1234. C'est à dire obtenir "1234FRAISE".

    Déjà, pour le coup, je ne sais pas trop comment m'y prendre en PL/SQL...
    Mais en plus, ça se corse. Dans mon champ FRUIT, je peux avoir plusieurs fruits, comme ceci : "FRAISE,POMME,POIRE,ABRICOT".
    Donc, dans mon champs CODEFRUIT, je voudrais 1234FRAISE,1234POMME,1234POIRE,1234ABRICOT.

    Autant je le fais en flex sans trop de difficultés, autant en PL/SQL... Et j'ai besoin de faire le script en PL/SQL.

    D'ailleurs, mon code en flex (si jamais ça peut aider)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if varFRUIT != ""
    {
        tabFruit = varFRUIT.split(',')
        for each (item in tabFruit)
        {
            item = "1234" + item;
            varCODEFRUIT = varCODEFRUIT+item+',';
        }
    }
    Je ne connais pas très bien ce langage, seulement les bases.
    J'ai commencé à faire ça (mais je vous préviens, c'est surement dégueulasse et à priori bourré de fautes!)
    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
     
    DECLARE
      TYPE tabFruit is varray (1000) of varchar2(15);
     
      cursor champFruit is
      select * from NOURRITURE
      where FRUIT IS NOT NULL;
     
      cursor item is
      select * from tabFruit ;
     
    Begin
      For champFruit in NOURRITURE Loop //boucler sur la table
        TAB tabFruit := tabFruit (substr(FRUIT, INSTR(FRUIT,',')));
     
        For item in tabFruit Loop //boucler sur le champ
          item='1234'+item;
          CODEFRUIT = CODEFRUIT +item+',';
        End loop;    
     
      End loop;
     
    End;
    Au secours!!!

  2. #2
    Membre expérimenté 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 : 49
    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
    Points : 1 597
    Points
    1 597
    Par défaut
    DBMS_UTILITY.COMMA_TO_TABLE est un genre d'équivalent de split

    => des exemples ici : https://forums.oracle.com/message/9408353

  3. #3
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2012
    Messages : 77
    Points : 85
    Points
    85
    Par défaut
    Ah merci beaucoup!! Ça m'aide déjà pas mal!

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Vous pouvez utiliser REPLACE, mais si les "," sont aléatoirement suivi d'espace utilisez une expression régulière, par exemple :
    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
    SQL> with t as (
      2  select 'FRAISE,    POIRE, POMME   , ABRICOT' as fruit from dual
      3  union all
      4  select 'FRAISE' as fruit from dual
      5  union all
      6  select 'FRAISE  , ABRICOT' as fruit from dual
      7  )
      8  select '1234' || regexp_replace(fruit, '[ ]*,[ ]*', ', 1234') as c from t;
     
    C
    --------------------------------------------------------------------------------
    1234FRAISE, 1234POIRE, 1234POMME, 1234ABRICOT
    1234FRAISE
    1234FRAISE, 1234ABRICOT
     
    SQL>

  5. #5
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2012
    Messages : 77
    Points : 85
    Points
    85
    Par défaut
    Merci beaucoup. J'avais cherché vraiment très compliqué finalement.
    Par contre, je me permets de pousser un peu le bouchon.

    Je ne connais pas le contenu du champ FRUIT, en fait. Donc j'ai essayé (bêtement) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      1  WITH t AS (
      2  SELECT FRUIT AS fruit FROM dual //ou TABLE.FRUIT
      3  )
      4  SELECT '1234' || regexp_replace(fruit, '[ ]*,[ ]*', ', 1234') AS c FROM t;
    Et j'obtiens
    ORA-00904: "FRUIT " : identificateur non valide
    Donc, est ce qu'avec cette méthode il est possible de simplement lui indiquer le champ?

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Le WITH n'est là que pour simuler la table pour mon exemple.
    Fruit est le nom de la colonne, pour votre cas réel vous faîtes seulement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT '1234' || regexp_replace(la_colonne, '[ ]*,[ ]*', ', 1234') AS c 
      FROM la_table
    Si l'expression régulière répond à votre besoin et si vous voulez stocker la valeur dans une nouvelle colonne, vous pouvez utiliser le regexp_replace dans un update :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    update la_table
       set la_nouvelle_colonne = '1234' || regexp_replace(la_colonne, '[ ]*,[ ]*', ', 1234')

  7. #7
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2012
    Messages : 77
    Points : 85
    Points
    85
    Par défaut
    HAHA désolée pour l'erreur de noob!
    En tout cas merci beaucoup, effectivement ça fonctionne parfaitement!

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

Discussions similaires

  1. Comment manipuler une chaine de caractère
    Par belmehdi17 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 11/03/2008, 16h03
  2. Manipulation de chaine de caractères, supression d'une apostrophe
    Par pmithrandir dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 28/11/2007, 07h55
  3. Manipulation des chaines de caractères en c
    Par developppez dans le forum C
    Réponses: 8
    Dernier message: 29/04/2007, 13h04
  4. Réponses: 4
    Dernier message: 14/10/2006, 23h38
  5. Réponses: 4
    Dernier message: 20/08/2004, 10h59

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