|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
amina ahbari Inscription : septembre 2010 Messages : 19 ![]() |
salut,
je veux créer un trigger qui permet de mettre à jour la quantité en stock d'un produit lors d'une opération effectuée dans la table achatProduit sachant que les tables sont les suivantes; produit(ref,nom,QtStock,prix unitaire) achat(produit(num,#refpro,dateachat,QtAchete) bon voilà mon essai,mais je pense qu'il y a un problème car rien ne change plus.et je pense que le problème est dû dans l'utilisation de "for update" car nous voulons que la table produit soit automatiquement modifiée alors le trigger est appliqué sur la table produit mais for quoi?je sais pas!! Code :
|
||
|
|
00
|
|
|
#2 | |
|
Membre expérimenté
![]() Inscription : octobre 2002 Messages : 654 ![]() |
bonjour,
Il y a plusieurs problèmes dans ton trigger. Dans Code :
SET @qtstock=(SELECT QtStock FROM inserted) Si tu fais update produit set designation=null sans where dans inserted tu auras tous tes produits. D'autre part dans Code :
UPDATE Produit SET stock=(@qtstock-@qtacheté) Enfin ton trigger est un trigger sur produit alors que Citation:
a+ Soazig |
|
|
|
10
|
|
|
#3 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour
en effet il y a plusieurs incohérences comme le dit soazig. Si vous tenez a passer par des triggers pour faire cela, il vous en faudra pour prévoir tous les cas susceptibles d'engendrer la modification du stock : - ajout d'un ligne dans la table des achat - modification d'une ligne de la table achat - ... De plus, cette information est redondante puisque vous avez (je suppose) le stock initial quelque part, et les différents achats. Il me semble bien plus simple et performant de supprimer la colonne stock de votre table produit, et de créer une vue qui reprend la calcul du stock. au besoin, vous pouvez indexer cette vue. Le sgbdr se chargera alors automatiquement de maintenir la valeur de stock a chaque modification des tables sous-jacentes... |
|
|
10
|
|
|
#4 | ||
|
amina ahbari Inscription : septembre 2010 Messages : 19 ![]() |
voilà une deuxieme essai après modification;
Code :
dans la table produit |
||
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
vous ne prenez pas en compte l'insertion dans la table achat ?
votre trigger est "after update", et sera donc declenché à chaque ordre UPDATE sur la table achat. pas en cas d'insertion. d'autre part, si vous faite comme ceci, vous aurez vite des incohérences voici un exemple : 1/ pour un produit, le stock est de 10. Il existe déjà une ligne dans achat pour ce produit avec une quantité de 5 2/ Vous mettez à jour la quantité à 3 votre trigger se déclenche, et met a jour la table produit, avec le stock a 7 (10 - 3 = 7) 3/ Vous faite a nouveau un update de la table achat et vous repassez la quantité a 5 (comme initialement) votre trigger se declenche, et passe le stock a 2 (7 - 5) |
|
|
00
|
|
|
#6 |
|
amina ahbari Inscription : septembre 2010 Messages : 19 ![]() |
Ah oui tu as raison, j'ai rencontré ce problème,
bon s'il est possible de créer le bon trigger, car j'ai déjà essayé plusieurs fois,mais rien |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com