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 FETCH / NEXT


Sujet :

PostgreSQL

  1. #1
    Membre averti
    Profil pro
    Enseignant
    Inscrit en
    Décembre 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 28
    Par défaut Trigger FETCH / NEXT
    Bonjour,

    J'ai un petit soucis avec un trigger qui utilise un curseur.
    Le message d'erreur me dit que le probleme vient vers ' NEXT '.

    Voici le 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
     
    CREATE FUNCTION commande () RETURNS TRIGGER AS '
    	DECLARE curseur CURSOR FOR SELECT id_produit, quantite_panier, prix_produit FROM PANIER NATURAL JOIN PRODUIT WHERE NEW.id_utilisateur;
    	BEGIN
    	OPEN curseur;
    	LOOP
    	FETCH curseur NEXT
    		INSERT INTO LIGNECOMMANDE( id_produit, id_commande, prix_lignecommande, qte_lignecommande) VALUES (NEW.id_produit, NEW.id_commande, prix_produit, quantite_panier)
            END LOOP
    	CLOSE curseur;
    	RETURN NEW;
        END;
    ' LANGUAGE 'plpgsql';
     
    CREATE TRIGGER commande BEFORE INSERT ON COMMANDE
        FOR EACH ROW EXECUTE PROCEDURE commande();

    Merci de votre aide.

  2. #2
    Membre averti
    Profil pro
    Enseignant
    Inscrit en
    Décembre 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 28
    Par défaut
    J'ai finalement trouvé.

    La syntaxe n'était pas la bonne voici comment on doit procéder :

    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
     
    CREATE OR REPLACE FUNCTION commande () RETURNS TRIGGER AS '
    	DECLARE curseur CURSOR FOR SELECT id_produit, quantite_panier, quantite_produit, prix_produit FROM PANIER NATURAL JOIN PRODUIT WHERE id_utilisateur = NEW.id_utilisateur;
    	idpro "public"."produit"."id_produit"%TYPE;
    	qte "public"."panier"."quantite_panier"%TYPE;
    	qteold "public"."produit"."quantite_produit"%TYPE;
    	prix "public"."produit"."prix_produit"%TYPE;
    	BEGIN
    	OPEN curseur;
    	FETCH curseur INTO idpro, qte, qteold, prix;
    	WHILE FOUND LOOP
    		INSERT INTO LIGNECOMMANDE( id_produit, id_commande, prix_lignecommande, qte_lignecommande) VALUES (idpro, NEW.id_commande, prix, qte);
    		UPDATE PRODUIT SET quantite_produit = qteold - qte;
    		FETCH curseur INTO idpro, qte, qteold, prix;
            END LOOP;
    	CLOSE curseur;
    	RETURN NEW;
        END;
    ' LANGUAGE 'plpgsql';
     
    CREATE TRIGGER commande AFTER INSERT ON COMMANDE
        FOR EACH ROW EXECUTE PROCEDURE commande();
    Ps: J'en ai profité pour completer mon trigger.

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

Discussions similaires

  1. Quel est l'équivalent de scroll cursor + fetch next en MySql
    Par zazz74 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 01/04/2009, 12h13
  2. FETCH (NEXT) : comment sa marche ?
    Par subzero82 dans le forum PostgreSQL
    Réponses: 0
    Dernier message: 30/06/2008, 14h38
  3. Réponses: 8
    Dernier message: 06/06/2008, 15h43
  4. [power designer et Sybase] trigger
    Par mr_qno dans le forum Sybase
    Réponses: 4
    Dernier message: 12/07/2006, 18h32
  5. [Comparatif] Procédures stockées, triggers, etc.
    Par MCZz dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/08/2002, 12h27

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