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

SQL Oracle Discussion :

UPDATE Decode ne fonctionne pas


Sujet :

SQL Oracle

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Points : 5
    Points
    5
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Avril 2005
    Messages : 197
    Points : 594
    Points
    594
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    UPDATE voirie SET libelle_voie = DECODE(trim(upper(libelle_voie)),
    	'QUINZIEME','15EME',
    	'22 E','22EME', libelle_voie);

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ').

  4. #4
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 59
    Points : 54
    Points
    54
    Par défaut
    La fonction REPLACE serait plus approprié dans ton cas.

  5. #5
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  6. #6
    Futur Membre du Club
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  7. #7
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Avril 2005
    Messages : 197
    Points : 594
    Points
    594
    Par défaut
    voila, j'ai pas bien lu le truc donc j'ai répondu un peut à côté...

  8. #8
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  9. #9
    Futur Membre du Club
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    OK. merci

    je vais tester

  10. #10
    Futur Membre du Club
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    re merci tout fonctionne

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

Discussions similaires

  1. [MySQL] Update qui ne fonctionne pas
    Par Pissou dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 28/03/2008, 15h16
  2. [MySQL] Code PHP sur des UPDATE qui ne fonctionne pas
    Par bilou95 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 08/10/2007, 11h57
  3. Requete UPDATE qui ne fonctionne pas
    Par JiB@ dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 02/03/2007, 18h06
  4. [MySQL] Requête update qui ne fonctionne pas
    Par Sylvain245 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 05/12/2005, 16h40
  5. [MySQL] UPDATE qui ne fonctionne pas
    Par philippef dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 13/09/2005, 14h35

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