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] problème insert


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre confirmé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Points : 626
    Points
    626
    Par défaut [Trigger] problème insert
    Bonjour,

    Je suis entrain de faire un trigger et j'ai un petit problème.

    En php je fais un insert dans une table et mon trigger consiste à vérifier, si dans cette table, il y a déjà une ligne qui existe (en fonction des id) on fait un update, sinon on fait l'insert comme prévu :

    Code SQL : 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
    CREATE FUNCTION f_consultation() RETURNS trigger AS
    $body$
    	DECLARE 
    		unId INTEGER;
    	BEGIN
    		SELECT *
    		FROM CONSULTATION
    		WHERE idpersonne = NEW.idpersonne
    		AND idtablature = NEW.idtablature
    		INTO unId;
     
    		IF unId=NULL THEN
    			RETURN NULL;
    		ELSE
    			UPDATE consultation SET quantite = quantite+1 WHERE idpersonne = NEW.idpersonne AND idtablature = NEW.idtablature;
    			RETURN NULL;
    		END IF;
     
    	END;
    $body$ language plpgsql;
     
    CREATE TRIGGER t_consultation BEFORE INSERT ON consultation
    FOR EACH ROW EXECUTE PROCEDURE f_consultation();

    Cela marche très bien pour l'update, mais le problème c'est que l'insert ne se fait jamais. Comment faire pour que l'insert se produise dans le cas ou je n'ai pas de lignes qui correspond a mon select ?

    En gros dans le if=NULL il faudrait rien faire et juste exécuter la requête d'insert comme prévu.

    Merci d'avance.

    John.

  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,

    Pour la partie insert faites :

  3. #3
    Membre confirmé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Points : 626
    Points
    626
    Par défaut
    Merci pour la réponse, mais malheureusement j'ai déjà essayé et cela ne fonctionne pas, il n'y a pas d'insert qui se produit.

  4. #4
    Membre confirmé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Points : 626
    Points
    626
    Par défaut
    Problème résolu.

    Effectivement il faut faire return new, mais il faut aussi mettre dans la condition IS NULL à la place de = NULL :

    Code SQL : 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
    CREATE FUNCTION f_consultation() RETURNS trigger AS
    $body$
    	DECLARE 
    		unId INTEGER;
    	BEGIN
    		SELECT *
    		FROM CONSULTATION
    		WHERE idpersonne = NEW.idpersonne
    		AND idtablature = NEW.idtablature
    		INTO unId;
     
    		IF unId IS NULL THEN
    			RETURN NEW;
    		ELSE
    			UPDATE consultation SET quantite = quantite+1 WHERE idpersonne = NEW.idpersonne AND idtablature = NEW.idtablature;
    			RETURN NULL;
    		END IF;
     
    	END;
    $body$ language plpgsql;
     
    CREATE TRIGGER t_consultation BEFORE INSERT ON consultation
    FOR EACH ROW EXECUTE PROCEDURE f_consultation();

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

Discussions similaires

  1. [MySQL-5.5] Problème trigger after insert
    Par JayenseN dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 25/03/2013, 21h05
  2. Problème avec un trigger d'insertion
    Par adrian07 dans le forum PL/SQL
    Réponses: 3
    Dernier message: 07/02/2012, 00h33
  3. Problème sur un trigger d'insertion
    Par houda_dd dans le forum PL/SQL
    Réponses: 6
    Dernier message: 31/01/2012, 02h14
  4. Problème avec trigger (table INSERTED)
    Par ygrim dans le forum Développement
    Réponses: 1
    Dernier message: 20/04/2008, 21h00
  5. [Trigger] Problème de curseur
    Par Superstivix dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/06/2004, 10h30

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