Page 1 sur 1

Problème de trigger

Posté : 06 oct. 2007, 12:04
par L0007
Bonjour,

J'essaye créer un trigger qui:
- va chercher le prix d'un produit dans la table de produit.
- utilise ce prix lors de mon insert dans la table de vente de ce produit.

Je voudrais donc encoder le produit et que le prix se mette automatiquement.

Mes tables sont (en simplifié):

-pour les produits
PRODUIT_CATALOGUE(PRO_ID,PCA_PRIX_VENTE)
--> PCA_PRIX_VENTE contient la valeur que je voudrais mettre avec le trigger.

-pour l'encodage de la commande
PARTICIPER(PRO_ID,PAR_PRIX_VENTE)
--> ici PAR_PRIX_VENTE est la valeur que je voudrais initialiser.

Mon trigger est le suivant:

Code : Tout sélectionner

CREATE TRIGGER test BEFORE INSERT ON PARTICIPER FOR EACH ROW BEGIN new.PAR_PRIX_VENTE=PRODUIT_CATALOGUE.PCA_PRIX_VENTE FROM PRODUIT_CATALOGUE where PRODUIT_CATALOGUE.PRO_ID = new.PRO_ID END;
Mas il ne fonctionne pas.

J'ai essayé d'autres trigger et ils fonctionnent.

Ici c'est la première fois que j'essaie d'initiliser un champ d'une table avec la valeur d'une autre table.

Quelqu'un peut-il m'aider?

Un tout tout tout grand merci d'avance :)

Re: Problème de trigger

Posté : 06 oct. 2007, 18:11
par Hubert Roksor
Avant toute chose, la structure de ta base de données me semble un peu étrange et je pense que tu ferais mieux de ne pas stocker le prix dans cette table mais plutôt utiliser une jointure lors des SELECT pour récupérer le prix. Ceci dit, je ne sais pas à quoi servent tes tables, donc si tu es sûr de toi, ignore ce passage.

Puisque tu n'as besoin que d'une valeur, tu devrais être en mesure de faire quelque chose comme "SET NEW.col = SELECT ... FROM".

Code : Tout sélectionner

CREATE TRIGGER test BEFORE INSERT ON PARTICIPER FOR EACH ROW BEGIN SET NEW.PAR_PRIX_VENTE = (SELECT PCA_PRIX_VENTE FROM PRODUIT_CATALOGUE where PRO_ID = NEW.PRO_ID); END
Sinon tu peux toujours utiliser une variable (à modifier selon le type de la colonne)

Code : Tout sélectionner

CREATE TRIGGER test BEFORE INSERT ON PARTICIPER FOR EACH ROW BEGIN DECLARE $prix FLOAT UNSIGNED; SELECT PCA_PRIX_VENTE INTO $prix FROM PRODUIT_CATALOGUE WHERE PRO_ID = NEW.PRO_ID; SET NEW.PAR_PRIX_VENTE = $prix; END