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 :

Appeler 2 procédures dans un trigger postgre


Sujet :

Requêtes PostgreSQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2012
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Appeler 2 procédures dans un trigger postgre
    Bonjur,
    Je cherche une solution pour appeler 2 procédures dans un trigger :

    Dans File1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE OR REPLACE FUNCTION F1()
      RETURNS trigger AS
    $BODY$DECLARE
          ...
          RETURN NULL;
       END;$BODY$
      LANGUAGE plpgsql VOLATILE
      COST 100;
    Dans File2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE OR REPLACE FUNCTION sillage.maj_geoparcelle()
      RETURNS trigger AS
    $BODY$
        ....
        RETURN NEW;
      END; 
    $BODY$
      LANGUAGE plpgsql VOLATILE
      COST 100;
    Le trigger désiré (qui ne fonctionne pas) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DROP TRIGGER IF EXISTS nom_trigger ON schema.table;
    CREATE TRIGGER nom_trigger
      AFTER UPDATE
      ON schema.table
      FOR EACH ROW
      EXECUTE PROCEDURE schema.F1();
      EXECUTE PROCEDURE schema.F2();

    Merci pour vos réponses.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    Si vous allez dans la doc pour regarder la syntaxe d'un create trigger vosu verrez qu'il ne peut y avoir qu'une seule procédure associée à un trigger.

    Donc au choix :
    - faire 2 triggers
    - gérer l'appel de vos deux procédures dans une autre procédure qui elle sera bindée au trigger
    - ne faire qu'une procédure

  3. #3
    Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2012
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Merci pour cette réponse.
    J'essaie de faire 2 fonctions, ce qui fonctionne sur la base, mais pas dans l'application qui utilise la base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE OR REPLACE FUNCTION schema.two_fonctions() RETURNS TRIGGER AS $$
    BEGIN
       select schema.F1();
       select schema.F2();
    END;
    $$ LANGUAGE plpgsql;
     
     
    DROP TRIGGER IF EXISTS nom_trigger ON schema.table;
    CREATE TRIGGER nom_trigger 
      AFTER UPDATE
      ON schema.table
      FOR EACH ROW
      EXECUTE PROCEDURE sillage.two_functions();
    Je pense que cela ne fonctionne pas car mes fonctions retourne "RETURNS TRIGGER".
    Je cherche ... mais toujours pas de solution

  4. #4
    Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2012
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    J'ai donc essaye la solution de faire 2 TRIGGER sur l'UPDATE de la table qui fonctionne correctement.
    Cette solution ne me semble pas la meilleure car je n'ai aucun moyen de savoir lequel est appelé en premier.
    Quelqu'un sait-il comment l'ordre d'appel est défini ?

  5. #5
    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
    C'est l'ordre alphabétique:
    If multiple triggers of the same kind are defined for the same event, they will be fired in alphabetical order by name.

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

Discussions similaires

  1. appel de procédure dans le trigger
    Par clemsso dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 12/10/2011, 21h41
  2. [2005] appel d'une procédure dans un trigger
    Par astur2000 dans le forum Développement
    Réponses: 4
    Dernier message: 12/09/2009, 11h18
  3. Comment appeler une procédure dans une autre unité ?
    Par michel71 dans le forum Langage
    Réponses: 1
    Dernier message: 19/09/2007, 16h27
  4. appel de procedure dans un trigger
    Par madimane dans le forum Oracle
    Réponses: 3
    Dernier message: 14/03/2006, 06h59
  5. Appel de procédure dans une page ASP
    Par PrinceMaster77 dans le forum ASP
    Réponses: 5
    Dernier message: 02/04/2004, 16h59

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