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 :

Fonction trigger sur postgresql


Sujet :

PostgreSQL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Fonction trigger sur postgresql
    bonjour à tous, j'ai besoin d'aide sur postgresql.
    je souhaite creer une fonction qui avant d'inserer une donnée dans une table verifie d'abord si la donnée existe: si oui elle fait un update, sinon elle fait l'insertion.

    et ensuite je creer un trigger sur l'insertion de la table: avant chaque insertion dans la table on execute d'abord la fonction.
    voici ce que j'ai essayer de faire:

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    CREATE FUNCTION mj (cle INT primary key , donnee varchar) RETURNS TRIGGER AS
    '
     
     
    BEGIN
        LOOP
            UPDATE teste SET nc = donnee WHERE idteste = cle;
            IF found THEN
                RETURN;
            END IF;
     
            BEGIN
                INSERT INTO teste(idteste,nc) VALUES (cle, donnee);
                RETURN;
            EXCEPTION WHEN unique_violation THEN
     
            END;
        END LOOP;
    END;
    end ;
    '
    LANGUAGE plpgsql;
     
     
     
    CREATE TRIGGER mjtest
    BEFORE INSERT ON teste 
    FOR EACH ROW
    EXECUTE PROCEDURE mj () ;
    et j'ai ce message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     les fonctions triggers ne peuvent pas avoir des
    arguments déclarés
      Hint: Les arguments du trigger peuvent
    être accédés via TG_NARGS et TG_ARGV à
    quelqu'un a une idée sur comment je peux gérer ce problème? svp et merci d'avance

  2. #2
    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
    Un trigger n'est pas vraiment adapté à ce cas de figure. Pourquoi ne pas appeler directement la fonction plutôt?

  3. #3
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 73

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Points : 126
    Points
    126
    Par défaut
    Et Comme cela ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DECLARE
    i integer;
    BEGIN
    select idtest from teste where idtest=new.idtest into i;
    if i is null return new ; else update ...
    Cordialement
    MS

Discussions similaires

  1. [SQL] porter une fonction MySql sur PostgreSQL
    Par spilliaert dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 02/06/2006, 20h30
  2. Trigger sur select
    Par bilo2000 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/02/2004, 13h39
  3. select dans un trigger sous Postgresql
    Par kastor_grog dans le forum Requêtes
    Réponses: 1
    Dernier message: 03/09/2003, 17h00
  4. Triggers sous PostGreSQL
    Par Phaf dans le forum Requêtes
    Réponses: 4
    Dernier message: 05/08/2003, 14h22
  5. Pb Trigger sur vue
    Par cosminutza dans le forum Développement
    Réponses: 3
    Dernier message: 28/07/2003, 16h37

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