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 :

Mise à jour partielle d'une colonne [11g]


Sujet :

SQL Oracle

  1. #1
    Membre habitué Avatar de JQueen
    Inscrit en
    Octobre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2008
    Messages : 214
    Points : 126
    Points
    126
    Par défaut Mise à jour partielle d'une colonne
    Bonjour,

    je veux mettre à jour une partie de la valeur de la colonne d'une table, est-ce possible ?

    Si oui, comment peut-on le faire ?

    J'explique mieux mon besoin :

    j'ai une table ayant une colonne "libellé" qui a des valeurs qui commencent parfois par la valeur "OP".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Exemple1 de valeur de la colonne : OP développement
    Exemple2 de valeur de la colonne : OP test
    Je veux modifier la valeur des lignes concernées de telle sorte que la valeur sera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nouvelle valeur exemple1 : Operation développement
    nouvelle valeur exemple2 : Operation test
    J'espère avoir été assez claire.

    Merci.

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Conceptuellement c'est juste mettre à jour la table avec colonne égal à 'Opération' concaténée avec le SubString de la colonne à partir de la troisième position pour toutes les colonnes ayant substr(colonne,1,2) égal à 'OP'

  3. #3
    Membre habitué Avatar de JQueen
    Inscrit en
    Octobre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2008
    Messages : 214
    Points : 126
    Points
    126
    Par défaut
    Merci pour ta réponse rapide mnitu.

    Donc si j'ai bien compris, la requête de mise à jour finale consiste à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UPDATE taches
    SET libelle = "Opération" || substr(libelle, 3)
    WHERE substr(libelle, 1, 2) LIKE "OP";

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Oui c'est ça mais pas like juste = 'OP'

  5. #5
    Membre habitué Avatar de JQueen
    Inscrit en
    Octobre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2008
    Messages : 214
    Points : 126
    Points
    126
    Par défaut
    En essayant d'exécuter la requête sur la base, je me suis rendue compte de certaines erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    substr(libelle, 3) ne marche pas, j'ai l'erreur ORA-01722: Nombre non valide
    En modifiant ce code en specifiant le nombre de caractères à prendre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    substr(libelle, 3, length(libelle)-3),  j'ai toujours la même erreur.
    des idées ?

  6. #6
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Nombre non valide veut dire que soit une conversion explicite soit implicite (une coercition) d'une chaine des caractères en numérique échoue parce que la chaine des caractères contient des données non convertible en numérique.
    Cela ne peut pas concerné la fonction SubStr que si la zone libelle est numérique mais dans ce cas vous vous trompez de colonne.

  7. #7
    Membre habitué Avatar de JQueen
    Inscrit en
    Octobre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2008
    Messages : 214
    Points : 126
    Points
    126
    Par défaut
    Bonjour mnitu,

    Cela ne peut pas concerné la fonction SubStr que si la zone libelle est numérique mais dans ce cas vous vous trompez de colonne.
    En fait, dans ma requête SQL j'ai une deuxième condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE taches
    SET libelle = "Opération" || substr(libelle, 3)
    WHERE code IN (140, 150)
     AND substr(libelle, 1, 2) LIKE "OP";
    La source de l'erreur est le code en rouge, car la colonne "code" est un varchar donc les nombres doivent être mis entre quote comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE taches
    SET libelle = "Opération" || substr(libelle, 3)
    WHERE code IN ('140', '150')
     AND substr(libelle, 1, 2) LIKE "OP";
    Merci pour ton aide

  8. #8
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ...
    code IN (140, 150)
    Code est de type varchar2 et vous lui demandez de comparer avec 140 qui est numérique. Pour cela Oracle fait une conversion implicite (on ne peut pas comparer les pommes avec les pruneaux), une coercition.
    Historiquement Oracle a décidé que dans ce cas la conversion sera fait au niveau de la chaine des caractères, donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    To_Number(code) In (140, 150)
    A l'époque cela s'était avère utile pour le traitement de numéros des comptes stockées comme des chaines des caractères préfixés avec des zéros:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    To_Number('00000140') = 140
    ce qui n'aurait pas marché si la coercition aurait était appliquée sur la valeur numérique:

  9. #9
    Membre habitué Avatar de JQueen
    Inscrit en
    Octobre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2008
    Messages : 214
    Points : 126
    Points
    126
    Par défaut
    Code est de type varchar2 et vous lui demandez de comparer avec 140 qui est numérique.
    En fait, sans bien vérifier dans la base, je pensais que le code est de type numérique.
    Suite à ta remarque, j'ai eu un doute et j'ai revérifié.

    Merci

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

Discussions similaires

  1. mise à jour automatique d'une colonne d'une table
    Par Cadros dans le forum Administration
    Réponses: 12
    Dernier message: 09/01/2014, 19h54
  2. [11gR2] Mise à jour NULL d'une fausse colonne ROWID
    Par d4voisin dans le forum Oracle
    Réponses: 3
    Dernier message: 05/06/2013, 09h32
  3. Mise à jour automatique d'une table access via un .xls
    Par infratunes dans le forum Access
    Réponses: 4
    Dernier message: 05/04/2006, 18h33
  4. [VS2003][VB.NET]Mise à jour DataSet d'une grille (erreur)
    Par m-mas dans le forum Windows Forms
    Réponses: 2
    Dernier message: 08/02/2006, 10h41
  5. Erreur mise en couleur d'une colonne excel depuis VB6
    Par pcvesoul dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 21/09/2005, 15h52

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