Vous êtes sur la page 1sur 3

TP n4 Les procdures stockes sous PostgreSQL

SLAM3 BTS2 SLAM 20/11/2015

Prparation
Avant de commencer, vous devez disposez d'un serveur PostgreSQL fonctionnel (virtuel),
ainsi que d'une machine cliente capable de se connecter au serveur. L'interface web
phppgadmin ou l'application pgadmin3 peuvent tre utilise si vous le souhaitez.
Documentation utiliser :
htp://docs.postgresql.fr/9.3/
htp://docs.postgresqlfr.org/9.3/plpgsql.html

Le modle conceptuel
Voici le modle conceptuel UML correspondant une base de donnes de gestion de
commandes simplife.

TP4v2 SLAM3 2015/2016

1/3

Travail faire
1. Traduisez le schma conceptuel prcdent en schma relationnel. N'oubliez pas les
cls trangres.

(Appelez-moi pour que je valide votre schma)


2. Crez la base de donnes relationnelle gestioncommandes correspondante au modle
que vous avez construit (sans les contraintes d'intgrit rfrentielle dans un
premier temps). Les cls primaires de toutes les tables doivent tre autoincrmentes (type SERIAL avec postgresql)
htp://docs.postgresqlfr.org/9.3/datatype.html
ATTENTION : Les noms des tables doivent rester en minuscule pour des raisons
de compatibilit entre les logiciels.
3. Insrez quelques lignes dans chaque table de la base de donnes, en utilisant
l'incrmentation automatique.
4. Ajoutez la contrainte d'intgrit rfrentielle entre la table produit et la table
c_a_passer en ajoutant l'option de suppression en cascade (on delete cascade). Testez
votre solution en supprimant un produit : les lignes correspondantes dans la table
c_a_passer devront tre efaces automatiquement.
5. crire une procdure stocke inserer_produit qui prend en paramtres une
dsignation de produit, un prix unitaire, une quantit et qui insre un nouveau
produit dans la base de donnes. Le numro de produit sera auto-incrment, les
quantits (sauf le stock) seront mises zro et l'alerte de stock sera initialise 1.
6. Chaque jour, la table des commandes passer est traite, les commandes de
produits sont passes auprs des fournisseurs et la table des commandes a passer
est ensuite vide. Ecrire une fonction vider_c_a_passer() qui vide cete table. La
fonction doit renvoyer le nombre de lignes supprimes.
7. crivez une procdure stocke extraire_commande qui renvoie toutes les commandes
d'un client dont le numro est pass en paramtre.
8. crivez une fonction reception_produit qui prend en paramtres un numro de
produit, un prix, et une quantit et qui met jour le prix unitaire moyen de ce
produit dans la table produit (on tiendra compte de la quantit ajoute et de la
quantit en stock pour le calcul).
TP4v2 SLAM3 2015/2016

2/3

Exemple :
On dispose d'un produit un prix unitaire de 100 avec une quantit en stock de 10.
On rceptionne 5 nouveaux produit 95.
Calcul du nouveau prix unitaire = (100*10+95*5)/15 = 98,33
9. Lorsque un produit est rceptionn (insertion dans la table c_reception), il faut
metre a jour le prix unitaire (voir question prcdente), la quantit en stock et la
quantit commande (qui diminue si elle n'est pas a 0) dans la table Produit.
crivez un dclencheur (trigger) qui ralise cete tche sur la base de donnes.
htp://www.btsinfogap.org/cours/s2/ig2/triggers_postgres_plpgsql.html

TP4v2 SLAM3 2015/2016

3/3