Vous êtes sur la page 1sur 2

Atelier SGBD Oracle

TP N°4 : Les curseurs PL/SQL

Objectif :
 Manipuler les curseurs dans les programmes PL/SQL.
 Manipuler les curseurs paramétrés.

Pré-requis
Base de Données, Leçon : SQL, Leçons : le Langage PL/SQL, les curseurs.
Environnement :
Matériel : Micro Ordinateur
Logiciel : SQL PLUS , Base de données 'Gestion_com', Comptes réseaux.

Eléments de Contenu
 Création des curseurs, open , close et fetch ou boucle for curseur
 Manipulations des attributs du curseur
 Boucle for et les Curseurs , curseurs paramétrés

Exercice 1
Développer un programme PL/SQL qui permet la mise à jour des prix unitaires des
articles selon les montants de ventes réalisés. Pour ce faire suivez les étapes
suivantes :
 Définir un curseur qui ramène tous les articles (idart, desart, pu)
 Pour chaque article, du curseur
 Calculer le total de ventes (somme des quantités commandées*pu) en utilisant
la table lig_com (totv = sum (qte_com)*pu )
 Calculer le PUM (prix unitaire moyen) des autres articles du curseur (excepté
de l’article en cours de traitement).
 Calculer le nouveau prix unitaire (npu) de l’article courant selon la règle
suivante :
o Si le totv est >= 5000 alors NPU = PU + |(PU-PUM)|/PU , Sinon
NPU= PU- |(PUM-PU)[/PUM.
 Effectuer la mise à jour du PU par le NPU de l'article courant.
 Insérer les données (idart, desart, pu, npu) dans la table résultat (à créer avant
l'exécution du programme), où pu désigne le prix unitaire de l’article avant la
mise à jour.
 Afficher à la fin du programme : nombre d'articles traités, le totv maximum et
son article correspondant.

Exercice 2
Programme de Facturation : créer les factures clients.
 Créer la table Facture Facture (numf, datef, montfac, numc#, numl#), si elle
n'est pas créée. Modifier le numf en varchar(15).
 Une facture concerne une commande non facturée (etat commande=0)
montFac=mntc- remise +TvaFac - RemiseFac
TvaFac = 12% pour les clients de Type R, 18% pour les autres clients

Par Chaieb Chiheb © 1/2 TP4 :PL/SQL (Curseurs)


Atelier SGBD Oracle

remiseFac = 10% si montFacBrut >5000, sinon = 5%.


 Le numéro de facture (numf) est une chaine constituée du idclt-numc-mois-
jour. Exemple : 1000-1-11-15.
 La date facture est celle de système. Le numl est null pour le moment.
Ce programme utilisera un curseur qui ramène toutes les commandes. Pour chaque
commande élaborer sa facture et l’enregistrer dans la table Facture, l’état de la
commande passe à 1.
NB :
 La fonction To_char(n) convertit n (nombre) en une chaine.
 To_char (sysdate, 'mm-dd') renvoie une chaine constituée du mois-jour (ex: 11-28).

Exercice 3 (curseur paramétré) :Livraison Clients


Nous souhaitons réaliser la livraison des commandes clients, pour ce faire nous vous
demandons de développer un programme PL/SQL qui réalise cette tache suivant les
indications suivantes :
 Chaque livraison correspond à un seul client et regroupe toutes ses
commandes facturées et non livrées (etat de commande =1).
 Définir un premier curseur qui ramène tous les clients ayant des commandes
facturées et non livrées (état = 1). Cursor Clt (idClt, nom, ville, codep)
 Définir un deuxième curseur paramétré sur le code client ramenant les
commandes du client en cours (numc, montc, remise)
 Elaborer pour chaque client, sa livraison, la dateLiv est la date du jour,
l'adrLiv est composée du code postal et de la ville du client correspondant, et
le montant livraison se calcule par la formule suivante :
Montliv = Somme (MontantCom Net ) + fraisLiv .
FraisLiv = 6dt si le client habite la capitale (Tunis) , sinon =8dt.
 Le MontantComNet = mntc*(1-remise) + fraisCommande, fraisCommande =
2.500 si la quantité totale de articles dans la commande >= 15, sinon 0.
 Le numéro livraison(numl) est une chaine composée de Idclt-mm-N où mm
est le numéro de mois courant(1,2, ..12), et N et un nombre généré par une
séquence à créer (seqGenIdLiv).
 Mettre à jour l’état de la commande livrée qui devient =2.
 Le programme insère chaque livraison élaborée dans la table LivClient
(idLiv, dateLiv, adrLiv, nbrCom , idclt#, nomclt) à créer.
 Le programme affichera à la fin : nombre de livraison tot, total des montants
des livraisons

Partie II : Détail Livraison (travail en Extra )


On vise maintenant à créer les lignes livraison pour chaque livraison élaborée par
le programme ci-dessus et ceci dans la table DetailLiv (numL, idart, QteLiv).
 La QteLiv est la somme de qteCom d’un même article (dans différentes
commandes) pour un client donné. Select idart, sum(qtecom) …from .. where
group by …
 A cet effet modifier le curseur 2 du programme ci-dessus à ce qu’il ramène les
articles commandés d’un client regroupés par idart.

Par Chaieb Chiheb © 2/2 TP4 :PL/SQL (Curseurs)

Vous aimerez peut-être aussi