Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/09/2007, 11h49   #1
Invité de passage
 
Inscription : juin 2007
Messages : 22
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : juin 2007
Messages : 22
Points : 3
Points : 3
Par défaut déclencheur oracle pl/sql

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.
uptoditime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 12h07   #2
Invité de passage
 
Inscription : juin 2007
Messages : 22
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : juin 2007
Messages : 22
Points : 3
Points : 3
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;
uptoditime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 13h19   #3
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
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 :
1
2
3
4
5
6
7
8
9
CREATE OR REPLACE TRIGGER "AJOUTSTOCK" AFTER INSERT ON livrer FOR EACH ROW
DECLARE 
BEGIN
 
UPDATE produits
SET produits.qte_stock = produits.qte_stock + 1
WHERE produits.ref_prod = :new.ref_prod;
 
END;
(:new.ref_prod : numéro du produit mis à jour dans la table livrer)

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.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 13h54   #4
Invité de passage
 
Inscription : juin 2007
Messages : 22
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : juin 2007
Messages : 22
Points : 3
Points : 3
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.
uptoditime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 14h04   #5
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
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.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 14h27   #6
Invité de passage
 
Inscription : juin 2007
Messages : 22
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : juin 2007
Messages : 22
Points : 3
Points : 3
Oui c'est ce que j'ai fait, voici le code que j'ai entré :

Code :
1
2
3
4
5
6
7
8
9
10
CREATE OR REPLACE
TRIGGER "AJOUTSTOCK" AFTER INSERT ON ligne_bliv FOR EACH ROW
DECLARE 
BEGIN
 
UPDATE produits
SET produits.qte_stock = produits.qte_stock + :new.qte_entree
WHERE produits.ref_prod = :new.num_prod;
 
END;
Mais rien ne passe au niveau de la table produit, le champ stock n'est pas mis à jour ...
uptoditime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 14h31   #7
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
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.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 14h39   #8
Invité de passage
 
Inscription : juin 2007
Messages : 22
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : juin 2007
Messages : 22
Points : 3
Points : 3
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.
uptoditime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 14h44   #9
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
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.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 14h53   #10
Invité de passage
 
Inscription : juin 2007
Messages : 22
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : juin 2007
Messages : 22
Points : 3
Points : 3

MErci ! ça marche, par contre je n'ai pas saisie quelque chose, le nvl correspond a quoi ?
uptoditime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 16h59   #11
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
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.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 17h59   #12
Invité de passage
 
Inscription : juin 2007
Messages : 22
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : juin 2007
Messages : 22
Points : 3
Points : 3
Ok merci pour ces explications
uptoditime est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h09.


 
 
 
 
Partenaires

Hébergement Web