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 :

select --> update ou update where !=


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 112
    Points : 104
    Points
    104
    Par défaut select --> update ou update where !=
    Salut,

    Je voulais savoir si dans un curseur destiné à mettre à jour une table, il est mieux (niveau performance surtout) de faire :

    1) - un select de la ligne de la table à mettre à jour
    - une comparaison
    - si différence --> update
    sinon rien

    2) un update sur la table à mettre à jour avec une clause where différent de la valeur du curseur courante

    Si vous n'avez pas compris ou qu'il manque des précisions n'hésitez pas.

    Petite précision peut être inutile : mon update comporte pas mal de decode.


    Merci

  2. #2
    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
    donne la requête qu'on y voit plus clair.
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 112
    Points : 104
    Points
    104
    Par défaut
    par exemple :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    UPDATE tabel c
    SET nom_com = curtmp.nom_com,
      num_1 = decode(curtmp.num,   NULL,   defaut,   curtmp.num)
    WHERE c.code_com = curtmp.cd_com
     AND curtmp.num != num_1
     AND nom_com != curtmp.nom_com;

  4. #4
    Membre du Club Avatar de lmartin
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Points : 68
    Points
    68
    Par défaut
    A mon avis vce qu'il faut faire c'est changer ton curseur pour qu'il ne te retourne que les lignes repectant tes conditions :

    WHERE c.code_com = curtmp.cd_com
    AND curtmp.num != num_1
    AND nom_com != curtmp.nom_com;

    Ensuite tu update ta table avec des égalités entre ton curseur et ta table.

  5. #5
    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
    Citation Envoyé par Kiroukool Voir le message
    par exemple :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    UPDATE tabel c
    SET nom_com = curtmp.nom_com,
      num_1 = decode(curtmp.num,   NULL,   defaut,   curtmp.num)
    WHERE c.code_com = curtmp.cd_com
     AND curtmp.num != num_1
     AND nom_com != curtmp.nom_com;
    La clause
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      AND curtmp.num != num_1
    exclut la possibilité que curtmp.num soit NULL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    decode(curtmp.num,   NULL,

Discussions similaires

  1. on duplicate key avec un select au lieu d'update ?
    Par pony dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/10/2006, 15h05
  2. Recupérer la valeur d'un select imbriqué dans un update
    Par miniil dans le forum Langage SQL
    Réponses: 3
    Dernier message: 07/07/2006, 10h49
  3. Réponses: 5
    Dernier message: 14/03/2006, 16h12
  4. critere de selection pr faire un UPDATE sur 1 table
    Par maxizoo dans le forum Langage SQL
    Réponses: 6
    Dernier message: 05/01/2006, 15h35
  5. Inclure un SELECT dans une requète Update
    Par carolinebelle dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/07/2005, 14h19

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