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 09/01/2012, 21h57   #1
Invité de passage
 
Homme Med Zied Ben Hmida
Étudiant
Inscription : novembre 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Med Zied Ben Hmida
Localisation : Tunisie

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2011
Messages : 3
Points : 0
Points : 0
Par défaut Automatisation d'une tâche avec triggers

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, mais j'ai un petit souci:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
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
zbhmida est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 22h05   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 928
Points : 1 928
Sur Oracle dans les triggers for each row il faut utiliser :old et :new, essaie :
Code :
WHERE NDVD = :old.NDVD;
Par contre ne serait ce pas plutôt qtestock - 1 ?
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 20h26   #3
Invité de passage
 
Homme Med Zied Ben Hmida
Étudiant
Inscription : novembre 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Med Zied Ben Hmida
Localisation : Tunisie

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2011
Messages : 3
Points : 0
Points : 0
Merci pour la réponse:

Alors bien sure j'avais cette idée d'utiliser les :old et :new, Mais si je fais ça je vais avoir la valeur de l'ancien numéros de DVD, alors que ce n'est pas ce que je veux,

=>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.
zbhmida est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 11h13   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Le IF INSERTING me paraît superflu puisque c'est un trigger AFTER INSERT.
Sinon skuatamad vous a donné la bonne réponse, en utilisant :new plutôt que :old (qui n'a du sens que pour les triggers UPDATE / DELETE).

Par contre côté modélisation ça m'a l'air un peu bancal !
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h23.


 
 
 
 
Partenaires

Hébergement Web