Langage PL/SQL                                   Langage PL/SQL                                      Atelier 2Exercice 1On...
Langage PL/SQL    4. Ecrire les scripts permettant de mettre à jour les tables Comptes et Stats       après chaque mise à ...
Langage PL/SQL                                   Detail_ClientsNBC                          Ref                           ...
Langage PL/SQLcreate table commandes(     nbc integer primary key,     datec date,     code integer);create table details(...
Langage PL/SQLwhere nbc=-1;create table jour_commandes2 as select *fromcommandes;delete from jour_commandes2;-- Ecrire un ...
Langage PL/SQLend if;end;Exercice 3On suppose que les tables sont déjà créées (Question 1)On suppose que la table Comptes ...
Langage PL/SQLEnd;4/Create or replace trigger tr1 after insert on retraitsFor each rowDeclare     Vsolde compte.solde%type...
Upcoming SlideShare
Loading in...5
×

Atelier2

556

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
556
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
48
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Atelier2

  1. 1. Langage PL/SQL Langage PL/SQL Atelier 2Exercice 1On souhaite conserver des statistiques concernant les mises à jour (insertion,modifications, suppression) sur la table Emp. Ces statistiques seront enregistréesdans une table appelée Stats ayant la structure suivante :TypeMAJ NbMAJ DateMAJInsert 0 NULLUpdate 0 NULLDelete 0 NULLEtapes à suivre • Créer une table Emp ayant la même structure que celle de Scott • Créer la table Stats initialisée à 0 pour NbMAJ et à NULL pour DateMAJ • Ecrire le ou les déclencheurs permettant de mettre à jour la table Stats après chaque opération de mise à jour sur la table EMPExercice 2Soit le schéma de la base de données suivante : • Articles (Ref, Des, PU, QteS,Coul) • Commandes (NBC, DateC, Code) • Détails (NBC, Ref, QteC, QteL)Créer une table jour_commandes (ayant la même structure que la tableCommandes) capable de récupérer les tuples effacés dans la table commandes.Ecrire le trigger qui automatise cette journalisation. Ce trigger permettra entre autrede :- De ne journaliser que les commandes qui n’ont pas une quantité livrée égale à 0- De ne journaliser que les commandes qui concerne un article de couleur noir.Exercice 3Le but de ce problème est de faire des statistiques concernant les transactionseffectuées par les clients d’une banque donnée. Pour cela on considère les tablessuivantes :i • Comptes(NCompte, Solde, Code) • Depots(NDepot, MontantD, NCompte) • Retraits(NRetrait, MontantR, NCompte) • Stats(NCompte, NombreD, NombreR)Travail à faire 1. Créer les quatre tables. Ne tenir compte que de la contrainte de clé primaire. 2. Alimenter la table Comptes de quelques comptes (environ 4). 3. Ecrire un programme PL/SQ pour alimenter la table Stats. La table Stats doit être initialisée par les NCompte de la table Comptes et par des zéros dans NombreD et NombreR. abdellah_madani@yahoo.fr 1
  2. 2. Langage PL/SQL 4. Ecrire les scripts permettant de mettre à jour les tables Comptes et Stats après chaque mise à jour des tables Retraits et Dépôts.Indications A chaque dépôt ou retrait, il faut mettre à jour le solde de la table Comptes. Le dépôt et le retrait affecte aussi le NombreD et NombreR de la table StatsExercice 4Le but est de faire la gestion des emprunts dune bibliothèque. Pour cela, onconsidère les trois tables : • Adhérents (NumA1, Nom, Tel) • Ouvrages (Ref, Titre, NbreExp2) • Emprunt (NumE3, NumA, Ref, DateE4)Les deux premières tables étant déjà alimentéesRègles de gestion • NumE doit être attribué automatiquement de la forme 100, 200, 300, … • Un adhérent ne peut emprunter un ouvrage que sil est disponible, mais ne peut en emprunter plus que 5 ouvrages. • Après chaque emprunt, on doit mettre à jour le nombre dexemplaires disponiblesTravail à faire 1- écrire le ou les déclencheur(s) pour gérer les emprunts des ouvrages 2- écrire un bloc permettant dafficher le récapitulatif des emprunts effectués par tous les adhérents pendant le mois de février 2006, sous la forme de :N°Adhérent Nom Ref Titre Date emprunt Nombre ouvrages Traiter le cas où aucun emprunt ne sest effectué pendant ce mois à laide dune exceptionExercice 5Lidée est de mettre à jour la quantité en stock après chaque opérationdentrée/sortie. Pour cela, on considère les tables suivantes : PRODUITSRef Des PU Qtes SeuilMax SeuilMin12341 N°Adhérent2 Nombre dexemplaires3 N°demprunt4 Date demprunt abdellah_madani@yahoo.fr 2
  3. 3. Langage PL/SQL Detail_ClientsNBC Ref QteC Detail_FournisseursNBC Ref QteCIndications • La tables Produits doit être alimentée par des articles. • A chaque opération dentrée/sortie, modifier la quantité en stock. Il faut respecter les seuils maximal et minimal de chaque produit.Exercice 6Une banque désire connaître le nombre de transactions effectuées par chacun deses clients à chaque opération de dépôt ou de retrait. A partir de la tabletransactions(DateT, NCompte, Montant, TypeT) (où TypeT : D pour dépôt, R pourchaque retrait), on veut mettre à jour la table clients(NCompte, Nom, Solde) et latable statut(NCompte, NbreD, NbreR). 1. Ecrire un programme PL/SQL pour remplir la table statut à partir de la table client 2. Ecrire un trigger pour mettre à jour les deux tables clients et statut à chaque insertion dans la table transactionsIndications • La table clients est déjà alimentée de quelques enregistrements • La table statut contient les n°comptes des clients et les nombres initialisés à 0 • La table transactions est videExercice 2create table articles( ref integer primary key, des varchar(30), pu float, qtes integer, coul varchar(20)); abdellah_madani@yahoo.fr 3
  4. 4. Langage PL/SQLcreate table commandes( nbc integer primary key, datec date, code integer);create table details( nbc integer, ref integer foreign key references articles(ref), qtec integer, qtel integer, constraint pk_details primary key(nbc, ref), constraint fk_details1 foreign key(nbc) references commandes(nbc));insert into articles values(1, p1,3,10,Rouge);insert into articles values(2, p2,3,10,Noir);insert into articles values(3, p3,3,10,Noir);insert into commandes values(10,sysdate,1);insert into commandes values(20,sysdate,1);insert into commandes values(30,sysdate,2);insert into commandes values(40,sysdate,1);insert into commandes values(50,sysdate,3);insert into details values(10,1,30,10);insert into details values(10,2,30,10);insert into details values(10,3,30,10);insert into details values(20,2,30,10);insert into details values(20,3,30,10);insert into details values(30,2,30,0);insert into details values(40,1,30,10);insert into details values(50,2,30,10);--Création de deux tables vides qui ont la même structureque la table-- commandescreate table jour_commandes1 as select *from commandes abdellah_madani@yahoo.fr 4
  5. 5. Langage PL/SQLwhere nbc=-1;create table jour_commandes2 as select *fromcommandes;delete from jour_commandes2;-- Ecrire un déclencheur pour enregistrer les commandessupprimés-- (de la table commandes) dans la table jour_commandes1create or replace trigger tr1 after delete on commandesfor each rowbegininsert into jour_commandes1 values(:old.nbc,:old.datec,:old.code);end;--Journaliser dans la table jou_commandes les commandesqui--ont toutes les QTEL<>0 et que tous les produits ont unecouleur--NOIRcreate or replace trigger tr1 after delete on commandesfor each rowdeclare vmin integer; nbre intreger;beginselect min(qteL) into vmin from details wherenbc=:old.nbc;select count(*) into nbre from details, articleswhere details.ref=articles.ref and coul<>Noir andnbc=:old.nbc;if (vmin>0 and nbre=0) then insert into jour_commandes1 values (:old.nbc,:old.datec,:old.code); abdellah_madani@yahoo.fr 5
  6. 6. Langage PL/SQLend if;end;Exercice 3On suppose que les tables sont déjà créées (Question 1)On suppose que la table Comptes est déjà alimentée(Question2)3/-- Dans un cursor for, la variable de la boucle for esttoujours-- considérée comme un enregistrement même si le curseur-- retourne un seul champsDeclareCursor c is select ncompte from compte ;BeginFor x in c loopInsert into stats values (x.ncompte, 0, 0);End loop;End;Declare Cursor c is select ncompte from compte ; vc compte.ncompte%type;Begin Open c; loop fetch c into vc exit when c%notfound Insert into stats values (vc, 0, 0); End loop; Close c; abdellah_madani@yahoo.fr 6
  7. 7. Langage PL/SQLEnd;4/Create or replace trigger tr1 after insert on retraitsFor each rowDeclare Vsolde compte.solde%type;BeginSelect solde into vsolde from comptewhere ncompte=:new.ncompte;If vsolde>=:new.montantr then Update comptes set solde=solde-:new.montantr Where ncompte=:new.ncompte; Update stats set nombrer=nombrer+1 Where ncompte= :new.ncompte ;End if ;End ; abdellah_madani@yahoo.fr 7

×