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 :

comparaison de chaines de caracteres en PLSQL [Trucs & Astuces]


Sujet :

PL/SQL Oracle

  1. #1
    Membre averti Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Points : 375
    Points
    375
    Par défaut comparaison de chaines de caracteres en PLSQL
    Bonjour,

    est ce que quelqu'un peut m'expliquer comment comparer 2 chaines de caracteres dans une procedure plsql. Je m'explique:


    dans la table VALEUR j'ai un champ NOMS
    ce champ contient des noms separés par une virgule:

    enregistrement n1, VALEUR.NOMS = 'titi 1,toto,tata'
    enregistrement n2, VALEUR.NOMS = 'toto,tutu,titi2'

    je voudrais comparer VALEUR.NOMS afin d'inserer dans n2 les noms titi 2 et tata

    j'ai tenté quelque chose avec la fonction
    INSTR( chaîne, sous-chaîne [, début [,nombre occurrences] ] )
    pour trouver la ',' mais je ne sais pas comment iterer sur la chaine jusqu'a ce que toutes les sous chaine soient traitées.

    si quelqu'un a une solution elle est la bienvenue

    merci

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Déjà j'ai l'impression que le modéle n'est pas bon, parce que mettre plusieurs noms ainsi dans une colonne c'est très dommage

    Ensuite t'es pas dans le forum Oracle, c'est encore plus dommage

    Enfin, tu peux mettre la valeur de la sous chaine depuis la 1° virgule + 1 jusqu'à la fin dans une variable et si il n'y a pas de virgule dedans tu arrêtes, sinon tu extraits le 1° mot de la chaine et ainsi de suite

  3. #3
    Expert Oracle confirmé

    Homme Profil pro
    Consultant Big Data
    Inscrit en
    Mars 2003
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant Big Data
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2003
    Messages : 448
    Points : 926
    Points
    926
    Par défaut
    Je n'ai pas de solution à te donner. Par contre, sache que le package DBMS_UTILITY t'offre entre autre une procédure qui s'appelle comma_to_table et qui permet d'analyser une chaîne de caractères contenant plusieurs valeurs séparées par des virgules (ce qui est ton cas) et qui fournit en retour une collection.

    Il serait alors peut-être plus facile pour toi de travailler sur des collections.

    Voici un exemple des procédures comma_to_table et table_to_comma.

    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
    declare
      chaine      VARCHAR2(32767) := '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 ;
    /
    Donne à l'exécution :

    La chaîne contient 3 valeurs
    val1
    val2
    val3
    val1,val2,val3,nouvelle valeur

  4. #4
    Membre averti Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Points : 375
    Points
    375
    Par défaut
    Merci beaucoup pour les reponses je pense que l'utilisation de DBMS_UTILITY est exactement ce qu'il me fallait.

    par contre orafrance tu me dis que je ne suis pas dans le forum Oracle, je suis dans lequel ?
    Que je ne me goure pas la prochaine fois

    encore merci

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 06/03/2008, 15h12
  2. [VBA/EXCEL]comparaison de chaine de caractere avec ou sans espace
    Par rodrigue62 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/07/2007, 10h48
  3. comparaison entre chaines de caracteres
    Par Mpierre dans le forum Oracle
    Réponses: 2
    Dernier message: 22/06/2006, 23h21
  4. [VBA]excel comparaison de chaine de caractere
    Par ogenki dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/01/2006, 15h32
  5. [LG]comparaison de chaines de caracteres
    Par thesam dans le forum Langage
    Réponses: 6
    Dernier message: 20/05/2003, 22h41

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