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 :

Trigger sur une même table [9.2]


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Points : 78
    Points
    78
    Par défaut Trigger sur une même table
    Bonjour,

    En fonction de deux valeurs dans les champs A et B, je souhaite que le champ C soit rempli ou mis à jour avec une valeur précise que je détermine dans le trigger.

    Par exemple :
    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 periode() returns trigger as
    $BODY$
    begin
    IF new.A >= x AND new.B <= y
    THEN insert into C values ('z')
    END IF;
    RETURN NULL ;
    END ;
    $BODY$
     
    LANGUAGE plpgsql;
    DROP TRIGGER IF EXISTS trg_periode ON temp ;
    CREATE TRIGGER trg_periode AFTER INSERT or UPDATE on temp
    FOR EACH ROW EXECUTE PROCEDURE periode();
    J'ai le message :
    ERROR : column C doesn't exist
    J'ai essayé avec un update à la place, échec.
    Je ne m'en sors pas.
    Puis-je être éclairé svp ?

    Merci

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Si vous écrivez INSERT INTO C, postgreSQL s'attend à écrire dans la table C.
    Essayez plutôt :

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Points : 78
    Points
    78
    Par défaut
    merci pour la réponse.
    Mais ça ne change rien dans la table et il n'y a pas de message d'erreur.

  4. #4
    Membre expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 591
    Points
    3 591
    Billets dans le blog
    8
    Par défaut
    Salut
    1. dans le code de la fonction, il faut "RETURN NEW" à la place de "RETURN NULL"
    2. dans le trigger, il faut "BEFORE" à la place de "AFTER".

    @+

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Points : 78
    Points
    78
    Par défaut
    La solution était la suivante :
    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 FUNCTION periode()
    RETURNS trigger AS '
    BEGIN
      IF NEW.A >= x AND NEW.B <= y THEN
        NEW.C = ''Z'';
      ELSE
        NEW.C = '''';
      END IF;
      RETURN NEW;
    END' LANGUAGE 'plpgsql'
     
    DROP TRIGGER IF EXISTS trg_periode ON T;
    CREATE TRIGGER trg_periode BEFORE INSERT or UPDATE on T
    FOR EACH ROW EXECUTE PROCEDURE periode();
    RETURN NEW effectivement, et trigger before sinon update en boucle infinie d'update.
    Merci à tous

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

Discussions similaires

  1. Plusieurs trigger sur une même table / Performances
    Par tchoimars dans le forum PL/SQL
    Réponses: 2
    Dernier message: 27/01/2010, 16h58
  2. Trigger Insert after sur une même table
    Par soumimasen dans le forum PL/SQL
    Réponses: 3
    Dernier message: 29/05/2008, 19h49
  3. Trigger sur une même table
    Par lamanoo dans le forum DB2
    Réponses: 6
    Dernier message: 29/08/2007, 18h01
  4. Réponses: 2
    Dernier message: 29/09/2004, 10h07
  5. jointure sur une même table
    Par guillaumeVb6 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 06/09/2004, 16h08

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