Page 1 sur 1

PL/SQL: Automatisation d'une tache: triggers

Posté : 10 janv. 2012, 21:43
par zayo
Bonsoir tout le monde,

Alors je travail sur un projet personnel, pour la gestion de mon club pour location et vente de DVD,

j'aimerais bien automatiser la tache de mise a jour de Stock a chaque livraison:
je m'explique:
- j'ai une table pour DVD(NDVD, PrixVente, QteStock, #titre film).
- une autre table pour Livraison(Nliv, NDVD, PrixDist)
- bien sure d'autre tables pour mon système,

==> Alors ce que je veux faire est une fois je saisi une nouvelle livraison, la QteStock dans la table DVD sera modifier d'une manière automatique, je sais bien que les triggers permettent d'automatiser cette tache,
ParExemple: lors d'ajout d'une livraison pour un DVD n°15, la fonction va parcourir la table DVD, pour rechercher le DVD n°15 et elle va incrémenter la valeur de QteStock.
Mais j'ai un petit souci:
CREATE OR REPLACE TRIGGER Maj_Stock
AFTER INSERT
ON Livraison
FOR each row
Declare
BEGIN
       IF Inserting then
       UPDATE DVD
       SET qtestock = qtestock +1
       WHERE NDVD = (SELECT *******);
       endif
end
/
**: je trouve pas comment pourrais je identifier lequel des DVDs je vais ajouter + 1 au stock, j’espère que vous avez compris ce que je veux,

merci d'avance

Re: PL/SQL: Automatisation d'une tache: triggers

Posté : 11 janv. 2012, 00:09
par sadeq
...

Mais j'ai un petit souci:
CREATE OR REPLACE TRIGGER Maj_Stock
AFTER INSERT
ON Livraison
FOR each row
Declare
BEGIN
       IF Inserting then
       UPDATE DVD
       SET qtestock = qtestock +1
       WHERE NDVD = (SELECT *******);
       endif
end
/
**: je trouve pas comment pourrais je identifier lequel des DVDs je vais ajouter + 1 au stock, j’espère que vous avez compris ce que je veux,

merci d'avance
L'enregistrement ajouté dans la table Livraison (à laquelle est affecté ce trigger) est intercepté par le trigger et caché dans un buffer temporaire nommé ":new" Donc le n° DVD que tu cherche se trouve dans cette table temporaire.

Ton trigger peut donc s'écrire comme ça:
CREATE OR REPLACE TRIGGER Maj_Stock
AFTER INSERT
ON Livraison
FOR each row
Declare
BEGIN
       IF Inserting THEN
         UPDATE DVD
         SET qtestock = qtestock +1
         WHERE DVD.NDVD = :new.NDVD;
       END IF;
END;
Voici la doc : http://deptinfo.cnam.fr/ressources/peda ... Oracle.pdf