Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/08/2004, 18h05   #1
Membre éclairé
 
Avatar de biozaxx
 
Inscription : août 2004
Messages : 403
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 403
Points : 316
Points : 316
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
biozaxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2004, 18h59   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
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
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2004, 09h08   #3
Expert Oracle confirmé

 
Homme Gilles ROUARD
Administrateur de base de données
Inscription : mars 2003
Messages : 220
Détails du profil
Informations personnelles :
Nom : Homme Gilles ROUARD
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Conseil

Informations forums :
Inscription : mars 2003
Messages : 220
Points : 322
Points : 322
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 :
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 :

Citation:
La chaîne contient 3 valeurs
val1
val2
val3
val1,val2,val3,nouvelle valeur
rouardg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2004, 09h41   #4
Membre éclairé
 
Avatar de biozaxx
 
Inscription : août 2004
Messages : 403
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 403
Points : 316
Points : 316
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
biozaxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h21.


 
 
 
 
Partenaires

Hébergement Web