Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
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 14/02/2011, 09h29   #1
Invité de passage
 
Céline
Inscription : février 2011
Messages : 14
Détails du profil
Informations personnelles :
Nom : Céline

Informations forums :
Inscription : février 2011
Messages : 14
Points : 0
Points : 0
Par défaut UPDATE Decode ne fonctionne pas

Bonjour,

Je travaille sur Oracle SVP developper.

J'ai une base de données de voirie où je souhaite remplacer des mots dans le libellé de la voie (champs : libelle_voie).

Par exemple : RUE DU QUINZIEME CORPS.

Je voudrais remplacer QUINZIEME par 15EME.

Code :
1
2
3
4
5
6
 
 
UPDATE voirie SET libelle_voie = DECODE(libelle_voie,
	' QUINZIEME ',' 15EME ',
	' 22 E ',' 22EME ', libelle_voie
);
Lorsque je l'exécute dans oracle, il me dis que "3632 rows updated", c'est a dire toutes mes lignes.

Mais quand je vérifie avec SELECT, les parties de chaines que je souhaite remplacer n'ont pas changées.

Pouvez-vous m'aider SVP ? J'espère avoir été assez clair. Merci
C_line83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 09h41   #2
Membre actif
 
Homme Cyrille
Administrateur de base de données
Inscription : avril 2005
Messages : 112
Détails du profil
Informations personnelles :
Nom : Homme Cyrille
Âge : 32
Localisation : France, Meurthe et Moselle (Lorraine)

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

Informations forums :
Inscription : avril 2005
Messages : 112
Points : 191
Points : 191
Oui il t'as mis à jour toutes tes lignes avec la valeur par défaut car il n'a pas trouvé les chaines de caractère que tu as mis dans les champs de recherche. Y a t il des espaces dans tes champs car tu met ' QUINZIEME ' et oracle est sensible à la casse. Si la valeur dans la colonne n'est pas exactement comme tu l'as écrit, ca ne mettra pas à jour (mais mettre les autres lignes .
Est ce que toutes les valeurs sont en majuscule ou bien ca peut etre aussi en minuscule?


j'ai modifié ta requête pour enlever les espaces et tout mettre en majuscules pour être sur que tout sois pris en compte.
Code :
1
2
3
4
5
 
 
UPDATE voirie SET libelle_voie = DECODE(trim(upper(libelle_voie)),
	'QUINZIEME','15EME',
	'22 E','22EME', libelle_voie);
IndianaAngus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 09h57   #3
Invité de passage
 
Céline
Inscription : février 2011
Messages : 14
Détails du profil
Informations personnelles :
Nom : Céline

Informations forums :
Inscription : février 2011
Messages : 14
Points : 0
Points : 0
Merci pour la rapidité.

Alors effectivement j'ai mis les espaces car j'ai aussi des chaines à remplacer en fin de chaine. Tous mes libellés sont en Majuscules.


par exemple : AVENUE DES ANC COMBATTANTS D AFN

Je souhaite remplacer ' ANC ' par ' ANCIENS et ' AFN' par ' AFRIQUE DU NORD'

espace avant et après ANC.
espace avant AFN.

voici mon code
Code :
1
2
3
4
5
 
UPDATE voirie SET libelle_voie = DECODE(libelle_voie,
	' ANC  ',' ANCIENS ',	
	' AFN',' AFRIQUE DU NORD',libelle_voie
    );
Mon vrai script est beaucoup plus long que celui-là.

Si je comprends bien, il faut aussi que je vérifie que tous les espaces de mes valeurs de départ (ici ' ANC ') se retrouvent dans mes valeurs d'arrivée (ici, ' ANCIENS ').
C_line83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 11h46   #4
Membre à l'essai
 
Inscription : mars 2007
Messages : 59
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 59
Points : 24
Points : 24
La fonction REPLACE serait plus approprié dans ton cas.
Ujitsu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 12h05   #5
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 437
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 437
Points : 4 173
Points : 4 173
Si c'est pour remplacer un bout, il faut utiliser replace.
Ensuite pour ne modifier que les lignes souhaitées, une clause where est nécessaire :
Code :
1
2
3
4
UPDATE voirie 
SET libelle_voie = REPLACE(REPLACE(libelle_voie, ' ANC  ',' ANCIENS '), ' AFN',' AFRIQUE DU NORD')
WHERE INSTR(libelle_voie, ' ANC  ') > 0
OR INSTR(libelle_voie, ' AFN') > 0
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 12h10   #6
Invité de passage
 
Céline
Inscription : février 2011
Messages : 14
Détails du profil
Informations personnelles :
Nom : Céline

Informations forums :
Inscription : février 2011
Messages : 14
Points : 0
Points : 0
C'est la question que je me posais !!

ma liste compte 76 éléments !!! Si je ne me trompe pas, cela me fera 76 replace à écrire ?!?!?!?

en gros mon script ressemblerai donc à ça ???

Code :
1
2
3
4
5
 
UPDATE voirie SET LIBELLE_VOIE
= REPLACE(LIBELLE_VOIE,' ANC ','  ANCIENS '),
REPLACE (LIBELLE_VOIE,' AFN',' AFRIQUE DU NORD'),
REPLACE (LIBELLE_VOIE,' DEUXIEME ',' 2EME '),
et ça avec mes 76 éléments que je souhaite remplacer dans mes chaines, à la suite ?

il n'existe pas une autre alternative ???

Merci
C_line83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 12h10   #7
Membre actif
 
Homme Cyrille
Administrateur de base de données
Inscription : avril 2005
Messages : 112
Détails du profil
Informations personnelles :
Nom : Homme Cyrille
Âge : 32
Localisation : France, Meurthe et Moselle (Lorraine)

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

Informations forums :
Inscription : avril 2005
Messages : 112
Points : 191
Points : 191
voila, j'ai pas bien lu le truc donc j'ai répondu un peut à côté...
IndianaAngus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 12h43   #8
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 437
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 437
Points : 4 173
Points : 4 173
Citation:
Envoyé par C_line83 Voir le message
ma liste compte 76 éléments !!! Si je ne me trompe pas, cela me fera 76 replace à écrire ?!?!?!?
en gros mon script ressemblerai donc à ça ???
Code :
1
2
3
4
5
 
UPDATE voirie SET LIBELLE_VOIE
= REPLACE(LIBELLE_VOIE,' ANC ','  ANCIENS '),
REPLACE (LIBELLE_VOIE,' AFN',' AFRIQUE DU NORD'),
REPLACE (LIBELLE_VOIE,' DEUXIEME ',' 2EME '),
Non, c'est replace de la chaine remplacée précédemment.
Code :
1
2
3
4
5
UPDATE voirie SET LIBELLE_VOIE
= REPLACE(REPLACE(REPLACE(LIBELLE_VOIE,' ANC ','  ANCIENS '),
' AFN',' AFRIQUE DU NORD'),
' DEUXIEME ',' 2EME '),
.. etc)
Et non il n'y a pas d'autre solution..à part 76 updates différents.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 13h52   #9
Invité de passage
 
Céline
Inscription : février 2011
Messages : 14
Détails du profil
Informations personnelles :
Nom : Céline

Informations forums :
Inscription : février 2011
Messages : 14
Points : 0
Points : 0
OK. merci

je vais tester
C_line83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 16h23   #10
Invité de passage
 
Céline
Inscription : février 2011
Messages : 14
Détails du profil
Informations personnelles :
Nom : Céline

Informations forums :
Inscription : février 2011
Messages : 14
Points : 0
Points : 0
re merci tout fonctionne
C_line83 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 10h24.


 
 
 
 
Partenaires

Hébergement Web