|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : juin 2007 Messages : 22 ![]() |
Bonjour,
Je dois réaliser une application de gestion de stock avec oracle application express c'est pour un stage, mais étant débutant en pl/sql je bloque sur un déclencheur que je dois créer. En fait je voudrais qu'a chaque ajout de ligne sur ma table 'livrer' ma table produits (contenant la quantité en stock du produit) soit mise à jour sur son champ qte_stock (quantité en stock) par la valeur entrée dans mon champ qte_entrée de la table livrer. Je voudrais donc savoir si c'est possible de créer une variable qui prendrais la valeur du champ qte_entree et qui mettrais à jour la table produits avec une requete update qui prends comme jointure le code produit et additionne la valeur du champ qte_stock de la table produit avec celle du champ qte_entree de la table livrer. voici la structure de mes 2 tables pour y voir plus clair : PRODUITS id_produit nom_produit qte_stock LIVRER num_bl_fk # id_prod_fk # qte_entree num_bl_fk estune clef étrangere de ma table livraison qui contient de numéro du bon de livraison la date et l'id fournisseur. Merci j'espere que c'est assez claire lol si vous avez une autre solution ou si ce que je veux n'est pas possible ... Je suis sous oracle 10g, windows vista 32bits, et j'utilise oracle application express 2. |
|
|
00
|
|
|
#2 |
|
Invité de passage
![]() Inscription : juin 2007 Messages : 22 ![]() |
J'ai testé ce code mais rien ne passe, je ne sais pas si il manque quelque chose :
CREATE OR REPLACE TRIGGER "AJOUTSTOCK" AFTER INSERT ON livrer FOR EACH ROW DECLARE nbinsert livrer.qte_entree%TYPE; nb_prod livrer_bliv.NUM_PROD%TYPE; BEGIN UPDATE produits SET produits.qte_stock = produits.qte_stock + 1 WHERE produits.ref_prod = nb_prod; END; |
|
|
00
|
|
|
#3 | ||
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
Merci de penser à utiliser les balises code (# dans la toolbar)
Il ne peut rien se passer, ta variable nb_prod est égale à null (tu ne l'initialises pas). Je suppose que tu veux faire quelque chose comme cela : Code :
Pour plus d'infos sur les triggers : http://sheikyerbouti.developpez.com/...?page=Chap6#L6
__________________
Un problème sans solution est un problème mal posé Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP. |
||
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() Inscription : juin 2007 Messages : 22 ![]() |
En fait je voudrais faire un déclencheur qui met a jour ma table de stock pour chaque ligne ajoutée dans ma table livrer.
Il faudrait que le trigger récupère la valeur du champ quantité de ma table livrer pour l'additionner a la valeur du champ qui contient le stock dans ma table stock. |
|
|
00
|
|
|
#5 |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
Utilises les variables :new.<col_de_table_livrer> (par exemple :new.qte_entree);
__________________
Un problème sans solution est un problème mal posé Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP. |
|
|
00
|
|
|
#6 | ||
|
Invité de passage
![]() Inscription : juin 2007 Messages : 22 ![]() |
Oui c'est ce que j'ai fait, voici le code que j'ai entré :
Code :
|
||
|
|
00
|
|
|
#7 |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
produits.qte_stock n'est pas null ?
__________________
Un problème sans solution est un problème mal posé Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP. |
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Inscription : juin 2007 Messages : 22 ![]() |
Avant l'insertion il est null et apres aussi, il n'y a aucun changement sur la table produits quand j'insert des données sur la table livrer, on dirais que le trigger ne fait rien.
|
|
|
00
|
|
|
#9 |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
null + un nombre = null
Il faut que tu fasses : Code :
produits.qte_stock = nvl(produits.qte_stock, 0) + :new.qte_entree
__________________
Un problème sans solution est un problème mal posé Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP. |
|
|
00
|
|
|
#10 |
|
Invité de passage
![]() Inscription : juin 2007 Messages : 22 ![]() |
![]() MErci ! ça marche, par contre je n'ai pas saisie quelque chose, le nvl correspond a quoi ? |
|
|
00
|
|
|
#11 |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
nvl(valeur1, valeur2) : si la valeur1 est null, il prend la valeur2
__________________
Un problème sans solution est un problème mal posé Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP. |
|
|
00
|
|
|
#12 |
|
Invité de passage
![]() Inscription : juin 2007 Messages : 22 ![]() |
Ok merci pour ces explications
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com