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

Requêtes PostgreSQL Discussion :

Exécution de code selon le résultat d'un UPDATE [9.4]


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services à domicile

    Informations forums :
    Inscription : Septembre 2005
    Messages : 197
    Points : 121
    Points
    121
    Par défaut Exécution de code selon le résultat d'un UPDATE
    Bonjour,

    Y a t-il moyen de récupérer le résultat d'un UPDATE et exécuter une action selon ce résultat ?
    Je souhaite lancer une autre action si ma requête UPDATE me renvoi "UPDATE 0"
    Sinon si "UPDATE 1" (ou plus que 1) ne rien faire.

    Merci de vos idées :-)

  2. #2
    Membre chevronné

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 576
    Points : 1 989
    Points
    1 989
    Par défaut
    Bonjour, avez vous essayé CASE en sql?

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services à domicile

    Informations forums :
    Inscription : Septembre 2005
    Messages : 197
    Points : 121
    Points
    121
    Par défaut
    Actuellement je fais cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    v_nom_auteur := TRIM(SUBSTRING(v_data, 24, 25));
    SELECT id INTO v_id_auteur FROM site.auteur WHERE nom = v_nom_auteur;
     
    IF NOT FOUND THEN
        INSERT INTO site.auteur (nom) VALUES (v_nom_auteur) RETURNING id INTO v_id_auteur;
    END IF;
     
    UPDATE site.article SET id_auteur = v_id_auteur WHERE id = v_id_article;
    Je dois mettre à jour un identifiant d'auteur dans ma table article mais avant je fais une vérification si celui-ci existe. Si c'est le cas je récupère l'id et met à jour l'article voulu.
    Si non présent j'insère l'auteur, récupère l'id et met à jour l'article voulu.
    Ce code fonctionne très bien sauf que ce n'est pas optimisé pour traiter des tables avec beaucoup de lignes.
    Ma table article comprend plus de 2300000 lignes.
    Ma table auteur en à plus de 800000.

    Est ce que CASE pourrais faire en sorte d'améliorer la vitesse de traitement ?
    Et surtout je ne vois pas trop comment l'utiliser ici car il faut tout de même commencer par interroger la table auteur et dans ce cas il n'y a que 2 réponses possibles : soit une ligne est trouvée soit aucune. Pour moi CASE set intéressant si on a au moins plus de 2 choix, non ?

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Votre select est inutile.
    Commencez par faire l'update, si ce dernier renvoie un rowcount à 0 alors faire l'insert.

    Edit : j'ai lu votre code trop vite et l'ai mal interprété. Ce que j'ai écrit ici n'est pas applicable dans votre cas.

    Si votre table article possède un index sur la colonne id, sa volumétrie importera peu.
    De même pour la colonne nom de votre table auteur.

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services à domicile

    Informations forums :
    Inscription : Septembre 2005
    Messages : 197
    Points : 121
    Points
    121
    Par défaut
    j'ai bien un index sur l'id de la table article mais pas sur nom de la table auteur.
    Je vais modifier cela tout de suite et tester.

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services à domicile

    Informations forums :
    Inscription : Septembre 2005
    Messages : 197
    Points : 121
    Points
    121
    Par défaut
    Bon et bien après ajout de l'index qui va bien, le temps d’exécution à été inférieur à 10 sec ce qui change tout :-)
    Merci Waldar pour le conseil.

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

Discussions similaires

  1. [XL-2010] Et la boucle est difficile à écrire! (executer un code selon les valeurs d'une liste)
    Par Mikayel dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/12/2014, 13h31
  2. batch qui execute du code
    Par fbu78 dans le forum Access
    Réponses: 2
    Dernier message: 21/09/2005, 22h31
  3. Executer du code binaire au sein d'un programme
    Par Hidekii dans le forum MFC
    Réponses: 13
    Dernier message: 07/09/2005, 22h10
  4. [FLASH MX2004] Rien ne se passe qd j'execute mon code
    Par adilou1981 dans le forum Flash
    Réponses: 2
    Dernier message: 27/07/2005, 23h31
  5. [C#]Comment executer du code qui se trouve dans une string ?
    Par freddyboy dans le forum Windows Forms
    Réponses: 4
    Dernier message: 28/02/2005, 16h31

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