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 :

Trigger dans PG


Sujet :

PostgreSQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2013
    Messages : 18
    Points : 12
    Points
    12
    Par défaut Trigger dans PG
    Bonjour à tous,
    après plusieurs heures de recherches je coince, je vous expose donc mon problème :
    J'ai une table points avec 5 colones
    ID : int
    nom : text
    type_evenement : text
    verif : bool
    type_verif : text
    Je voudrais créer un trigger qui me permet de remplir type_verif de manière automatique a partir du moment où l'on insert une nouvelle ligne ou qu'une mise à jour est faite sur les enregistrements existant.
    Je voudrais que ce champ fasse une concaténation des 2 champs type_evenement et verif


    Pour l'instant j'arrive à faire des mise à jour en faisant comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    update points
    set type_verif = 'T' || type_evenement
    where verif is true
    update points
    set type_verif = 'F' || type_evenement
    where verif is false
    update points
    set type_verif = 'N' || type_evenement
    where verif is null
    Pas de problème là dessus mais impossible de mettre cela en trigger
    une idée ??

    Merci d'avance

  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,

    Avez-vous lu la doc postgresql ?
    Il y a des exemples très parlant : http://www.postgresql.org/docs/9.2/s...l-trigger.html



    Indiquez le code de vos trigger et le problème rencontré.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2013
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TRIGGER maj
      AFTER INSERT OR UPDATE
      ON testsql.points
      FOR EACH ROW
      EXECUTE PROCEDURE testsql.test_miseajour();
    et ma fonction trigger :

    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
    16
    17
    18
    19
    CREATE OR REPLACE FUNCTION testsql.test_miseajour()
      RETURNS trigger AS
    $BODY$
    BEGIN
    update testsql.points
    set "type_verif"= char 'N' || type_evenement
    where verif is null ;
    update testsql.points
    set "type_verif" = char 'T' || type_evenement
    where verif is true ;
    update testsql.points
    set "type_verif" = char 'F' || type_evenement
    where verif is false ;
    END
    $BODY$
      LANGUAGE plpgsql VOLATILE
      COST 100;
    ALTER FUNCTION testsql.test_miseajour()
      OWNER TO sde;

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2013
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    et je lis la doc depuis un bon moment mais je ne trouve pas comment faire.

  5. #5
    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
    Dans la déclaration de votre trigger vous avez spécifiez : FOR EACH ROW


    De ce fait, le trigger va s'executer pour chaque ligne.
    Vous avez donc directement acces aux données insérées / updatées via les alias OLD et NEW.

    Il ne faut donc pas faire un update mais utiliser directement NEW.ma_colonne = ma_valeur.

    Il y a tout ce dont vous avez besoin dans le 1er exemple de la doc : http://www.postgresql.org/docs/9.2/s...RIGGER-EXAMPLE

    n'oubliez pas le return new; en fin de fonction.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2013
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Bon j'ai finalement réussi, merci pour vos réponses si précieuses
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    BEGIN
    IF NEW.verif is null Then 
    NEW.type_verif = char'N' || NEW.type_evenement;
    END IF ;
    IF NEW.verif is false Then 
    NEW.type_verif = char'F' || NEW.type_evenement;
    END IF ;
    IF NEW.verif is true Then 
    NEW.type_verif = char'T' || NEW.type_evenement;
    END IF ;
    RETURN NEW;
    END;

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

Discussions similaires

  1. Trigger dans une transaction? Possible?
    Par SuperCed dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 24/08/2007, 18h45
  2. Pb sur la création d'un trigger dans MySql
    Par NoiBe dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 29/03/2007, 09h08
  3. Réponses: 4
    Dernier message: 11/08/2006, 14h43
  4. [PL/SQL] Creation de triggers dans transaction
    Par globeriding dans le forum Oracle
    Réponses: 15
    Dernier message: 07/02/2006, 12h33
  5. recupérer raiserror d'un trigger dans page asp
    Par julio_097 dans le forum Développement
    Réponses: 4
    Dernier message: 24/08/2005, 15h42

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