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

PostgreSQL Discussion :

Synchronisation de 2 champs sur 2 tables


Sujet :

PostgreSQL

  1. #1
    Membre actif
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mars 2006
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestionnaire de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 356
    Points : 248
    Points
    248
    Par défaut Synchronisation de 2 champs sur 2 tables
    * Bonjour, *

    Dans la même BD , j'ai 2 tables T1 et T2.
    T1 contient entre autres une clé num_client et une colonne C1
    T2 contient entre autres une clé num_client et une colonne C2.
    La colonne num_client fait la jointure entre les 2 tables
    Ce que je voudrais : lors d'un update de la table T1 , le champ C2 doit prendre la valeur de C1.

    J'ai donc fait un trigger

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TRIGGER Synchro
        AFTER UPDATE
        ON T1
        FOR EACH ROW
        EXECUTE PROCEDURE Synchro()
    ;
    et une fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE FUNCTION Synchro()
      RETURNS "trigger" AS
    $BODY$ 
    DECLARE
    BEGIN
    UPDATE T2
        SET C2 = C1
        FROM T1
        WHERE T2.num_client = T1.num_client 
    RETURN NEW;    
    END;
    $BODY$
    LANGUAGE 'plpgsql' VOLATILE;
    Le pb est que toute la table T2 est mise à jour.
    Et je voudrais que cela soit seulement l'enregistrement de T2 qui est lié à celui de T1 par num_client

    * Merci *

  2. #2
    Membre actif
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mars 2006
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestionnaire de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 356
    Points : 248
    Points
    248
    Par défaut
    J'ai modifié la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    CREATE FUNCTION Synchro()
      RETURNS "trigger" AS
    $BODY$ 
    DECLARE
    vartempo integer ; 
    BEGIN
    vartempo := new.num_client
    UPDATE T2
    	SET C2 = new.C1
    	FROM T1
    	WHERE T2.num_client = vartempo
    RETURN NEW;	
    END;
    $BODY$
    LANGUAGE 'plpgsql' VOLATILE;
    Résultat :
    Un seul enregistrement de T2 est mis à jour. C'est ce que je voulais.

    En revanche je ne m'explique pas pourquoi le temps de traitement du trigger est toujours aussi long quand je modifie un enreg de la table T1.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Il faudrait enlever le FROM T1 de la requête UPDATE

  4. #4
    Membre actif
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mars 2006
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestionnaire de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 356
    Points : 248
    Points
    248
    Par défaut
    Nickel , c'est maintenant instantané .

    Merci beaucoup !

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

Discussions similaires

  1. Requète complexe lier 2 champs sur une table
    Par charpeer dans le forum Requêtes
    Réponses: 4
    Dernier message: 20/06/2008, 15h28
  2. [Probleme] Comparaison 1 champs sur X tables
    Par guromgd dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/01/2008, 11h53
  3. rechercher le max d'un champ sur 2 tables
    Par rdams dans le forum Requêtes
    Réponses: 2
    Dernier message: 16/03/2006, 13h27
  4. selection comlexe de champs sur une table
    Par allowen dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/03/2006, 15h00
  5. Sum de deux champs sur deux tables différentes
    Par kluh dans le forum Oracle
    Réponses: 11
    Dernier message: 29/09/2005, 18h21

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