SlideShare une entreprise Scribd logo
1  sur  7
Langage PL/SQL


                                   Langage PL/SQL
                                      Atelier 2

Exercice 1
On souhaite conserver des statistiques concernant les mises à jour (insertion,
modifications, suppression) sur la table Emp. Ces statistiques seront enregistrées
dans une table appelée 'Stats' ayant la structure suivante :

TypeMAJ                      NbMAJ                          DateMAJ
Insert                       0                              NULL
Update                       0                              NULL
Delete                       0                              NULL

Etapes à 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 EMP

Exercice 2
Soit 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 table
Commandes) capable de récupérer les tuples effacés dans la table commandes.

Ecrire le trigger qui automatise cette journalisation. Ce trigger permettra entre autre
de :
- 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 3
Le but de ce problème est de faire des statistiques concernant les transactions
effectuées par les clients d’une banque donnée. Pour cela on considère les tables
suivantes :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
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 Stats

Exercice 4
Le but est de faire la gestion des emprunts d'une bibliothèque. Pour cela, on
considè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ées

Règles de gestion
  • NumE doit être attribué automatiquement de la forme 100, 200, 300, …
  • Un adhérent ne peut emprunter un ouvrage que s'il est disponible, mais ne
      peut en emprunter plus que 5 ouvrages.
  • Après chaque emprunt, on doit mettre à jour le nombre d'exemplaires
      disponibles

Travail à faire
   1- écrire le ou les déclencheur(s) pour gérer les emprunts des ouvrages
   2- écrire un bloc permettant d'afficher 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 s'est effectué pendant ce mois à l'aide d'une
    exception

Exercice 5
L'idée est de mettre à jour la quantité en stock après chaque opération
d'entrée/sortie. Pour cela, on considère les tables suivantes :

                                      PRODUITS
Ref              Des         PU           Qtes                 SeuilMax     SeuilMin
1
2
3
4

1
  N°Adhérent
2
  Nombre d'exemplaires
3
  N°d'emprunt
4
  Date d'emprunt


                                  abdellah_madani@yahoo.fr                               2
Langage PL/SQL




                                   Detail_Clients
NBC                          Ref                           QteC


                               Detail_Fournisseurs
NBC                          Ref                           QteC


Indications
   • La tables 'Produits' doit être alimentée par des articles.
   • A chaque opération d'entrée/sortie, modifier la quantité en stock. Il faut
      respecter les seuils maximal et minimal de chaque produit.

Exercice 6
Une banque désire connaître le nombre de transactions effectuées par chacun de
ses clients à chaque opération de dépôt ou de retrait. A partir de la table
transactions(DateT, NCompte, Montant, TypeT) (où TypeT : D pour dépôt, R pour
chaque retrait), on veut mettre à jour la table clients(NCompte, Nom, Solde) et la
table 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 transactions

Indications
   • 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 vide




Exercice 2
create table articles(
    ref integer primary key,
    des varchar(30),
    pu float,
    qtes integer,
    coul varchar(20)
);


                                abdellah_madani@yahoo.fr                                3
Langage PL/SQL



create 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 structure
que la table
-- commandes
create table jour_commandes1 as select *from commandes


                        abdellah_madani@yahoo.fr          4
Langage PL/SQL



where nbc=-1;
create table jour_commandes2 as select *from
commandes;
delete from jour_commandes2;

-- Ecrire un déclencheur pour enregistrer les commandes
supprimés
-- (de la table commandes) dans la table jour_commandes1

create or replace trigger tr1 after delete on commandes

for each row
begin
insert into jour_commandes1 values
(:old.nbc,:old.datec,:old.code);
end;

--Journaliser dans la table jou_commandes les commandes
qui
--ont toutes les QTEL<>0 et que tous les produits ont une
couleur
--NOIR

create or replace trigger tr1 after delete on commandes
for each row
declare
      vmin integer;
      nbre intreger;
begin
select min(qteL) into vmin from details where
nbc=:old.nbc;
select count(*) into nbre from details, articles
where details.ref=articles.ref and coul<>'Noir' and
nbc=: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
Langage PL/SQL



end if;
end;


Exercice 3
On 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 est
toujours
-- considérée comme un enregistrement même si le curseur
-- retourne un seul champs
Declare
Cursor c is select ncompte from compte ;
Begin
For x in c loop
Insert 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
Langage PL/SQL



End;


4/

Create or replace trigger tr1 after insert on retraits
For each row
Declare
     Vsolde compte.solde%type;
Begin
Select solde into vsolde from compte
where 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

Contenu connexe

En vedette

“Del contenido al desarrollo de competencias y habilidades a través de los mu...
“Del contenido al desarrollo de competencias y habilidades a través de los mu...“Del contenido al desarrollo de competencias y habilidades a través de los mu...
“Del contenido al desarrollo de competencias y habilidades a través de los mu...CRISEL BY AEFOL
 
Categorias del comercio electronico
Categorias del comercio electronicoCategorias del comercio electronico
Categorias del comercio electronicoHunterPal
 
Dossier pedagogique machinima_v2
Dossier pedagogique machinima_v2Dossier pedagogique machinima_v2
Dossier pedagogique machinima_v2Reggie_MFX
 
La france face à la mondialisation
La france face à la mondialisationLa france face à la mondialisation
La france face à la mondialisationPierre Cattoire, MBA
 
Présentation projet tourisme responsable circuit Cambodge by Vision Ethique
Présentation projet tourisme responsable circuit Cambodge by Vision EthiquePrésentation projet tourisme responsable circuit Cambodge by Vision Ethique
Présentation projet tourisme responsable circuit Cambodge by Vision EthiqueCaroline Debonnaire
 
Mejora tu perfil de LinkedIn en tres pasos
Mejora tu perfil de LinkedIn en tres pasosMejora tu perfil de LinkedIn en tres pasos
Mejora tu perfil de LinkedIn en tres pasosAngie Rodriguez
 
LIVRE BLANC : Secteur public - Agenda 2020
LIVRE BLANC : Secteur public - Agenda 2020LIVRE BLANC : Secteur public - Agenda 2020
LIVRE BLANC : Secteur public - Agenda 2020Inetum
 
Laboratorio de simulacion moodle
Laboratorio de simulacion moodleLaboratorio de simulacion moodle
Laboratorio de simulacion moodleAngelica Prada
 
Inteligencia artificial 2
Inteligencia artificial 2Inteligencia artificial 2
Inteligencia artificial 2yeferson0
 
Analyse financière des comptes du club mediterrannée
Analyse financière des comptes du club mediterrannéeAnalyse financière des comptes du club mediterrannée
Analyse financière des comptes du club mediterrannéePierre Cattoire, MBA
 
M3 enterprise fr 1.4
M3 enterprise fr 1.4M3 enterprise fr 1.4
M3 enterprise fr 1.4AppQuartz
 
Carré Rive Gauche - Revue de presse 2015
Carré Rive Gauche - Revue de presse 2015Carré Rive Gauche - Revue de presse 2015
Carré Rive Gauche - Revue de presse 2015Agence Colonnes
 
Mode emploi Z6 JURA - Robot café JURA Z6
Mode emploi Z6 JURA - Robot café JURA Z6Mode emploi Z6 JURA - Robot café JURA Z6
Mode emploi Z6 JURA - Robot café JURA Z6habiague
 

En vedette (20)

Symposium international mars 2015 slatina
Symposium international mars 2015 slatinaSymposium international mars 2015 slatina
Symposium international mars 2015 slatina
 
lugares turisticos del ecuador
lugares turisticos del ecuadorlugares turisticos del ecuador
lugares turisticos del ecuador
 
Manual scratch
Manual scratchManual scratch
Manual scratch
 
“Del contenido al desarrollo de competencias y habilidades a través de los mu...
“Del contenido al desarrollo de competencias y habilidades a través de los mu...“Del contenido al desarrollo de competencias y habilidades a través de los mu...
“Del contenido al desarrollo de competencias y habilidades a través de los mu...
 
Categorias del comercio electronico
Categorias del comercio electronicoCategorias del comercio electronico
Categorias del comercio electronico
 
Dossier pedagogique machinima_v2
Dossier pedagogique machinima_v2Dossier pedagogique machinima_v2
Dossier pedagogique machinima_v2
 
La france face à la mondialisation
La france face à la mondialisationLa france face à la mondialisation
La france face à la mondialisation
 
Présentation projet tourisme responsable circuit Cambodge by Vision Ethique
Présentation projet tourisme responsable circuit Cambodge by Vision EthiquePrésentation projet tourisme responsable circuit Cambodge by Vision Ethique
Présentation projet tourisme responsable circuit Cambodge by Vision Ethique
 
Taller n° 2b
Taller n° 2bTaller n° 2b
Taller n° 2b
 
Mejora tu perfil de LinkedIn en tres pasos
Mejora tu perfil de LinkedIn en tres pasosMejora tu perfil de LinkedIn en tres pasos
Mejora tu perfil de LinkedIn en tres pasos
 
LIVRE BLANC : Secteur public - Agenda 2020
LIVRE BLANC : Secteur public - Agenda 2020LIVRE BLANC : Secteur public - Agenda 2020
LIVRE BLANC : Secteur public - Agenda 2020
 
Laboratorio de simulacion moodle
Laboratorio de simulacion moodleLaboratorio de simulacion moodle
Laboratorio de simulacion moodle
 
Inteligencia artificial 2
Inteligencia artificial 2Inteligencia artificial 2
Inteligencia artificial 2
 
Cnudst
CnudstCnudst
Cnudst
 
Analyse financière des comptes du club mediterrannée
Analyse financière des comptes du club mediterrannéeAnalyse financière des comptes du club mediterrannée
Analyse financière des comptes du club mediterrannée
 
Características de las TIC
Características de las TICCaracterísticas de las TIC
Características de las TIC
 
M3 enterprise fr 1.4
M3 enterprise fr 1.4M3 enterprise fr 1.4
M3 enterprise fr 1.4
 
Diaporama projet
Diaporama projetDiaporama projet
Diaporama projet
 
Carré Rive Gauche - Revue de presse 2015
Carré Rive Gauche - Revue de presse 2015Carré Rive Gauche - Revue de presse 2015
Carré Rive Gauche - Revue de presse 2015
 
Mode emploi Z6 JURA - Robot café JURA Z6
Mode emploi Z6 JURA - Robot café JURA Z6Mode emploi Z6 JURA - Robot café JURA Z6
Mode emploi Z6 JURA - Robot café JURA Z6
 

Similaire à Atelier2

js---Partie1----.pdf
js---Partie1----.pdfjs---Partie1----.pdf
js---Partie1----.pdfMiRA452885
 
Examen de passage TDI - Synthèse V1 - 2015
Examen de passage TDI - Synthèse V1 - 2015Examen de passage TDI - Synthèse V1 - 2015
Examen de passage TDI - Synthèse V1 - 2015exelibnet
 
1 tdi synthese_principale_v2_2015.docx
1 tdi synthese_principale_v2_2015.docx1 tdi synthese_principale_v2_2015.docx
1 tdi synthese_principale_v2_2015.docxkhawla sdid
 
Examen de-passage-developpement-informatiques-tsdi-2015-synthese-variante-1-o...
Examen de-passage-developpement-informatiques-tsdi-2015-synthese-variante-1-o...Examen de-passage-developpement-informatiques-tsdi-2015-synthese-variante-1-o...
Examen de-passage-developpement-informatiques-tsdi-2015-synthese-variante-1-o...abdelghani04
 
passage tdi 2015 v1
passage tdi 2015 v1passage tdi 2015 v1
passage tdi 2015 v1abdelghani04
 
Examen de-passage-developpement-informatiques-tsdi-2015-synthese-variante-2-o...
Examen de-passage-developpement-informatiques-tsdi-2015-synthese-variante-2-o...Examen de-passage-developpement-informatiques-tsdi-2015-synthese-variante-2-o...
Examen de-passage-developpement-informatiques-tsdi-2015-synthese-variante-2-o...abdelghani04
 
Epreuve concours génie informatique
Epreuve concours génie informatiqueEpreuve concours génie informatique
Epreuve concours génie informatiquebeware_17
 
Projet BI - 2 - Conception base de données
Projet BI - 2 - Conception base de donnéesProjet BI - 2 - Conception base de données
Projet BI - 2 - Conception base de donnéesJean-Marc Dupont
 
1-pl-sql 2021 2022.pdf
1-pl-sql 2021 2022.pdf1-pl-sql 2021 2022.pdf
1-pl-sql 2021 2022.pdfImaneZoubir1
 
Jp perez correction quizz oracle mairie de paris acma 2007 2008
Jp perez correction quizz oracle mairie de paris acma 2007 2008Jp perez correction quizz oracle mairie de paris acma 2007 2008
Jp perez correction quizz oracle mairie de paris acma 2007 2008MRamo2s
 
Scilab pour les vrais débutants
Scilab pour les vrais débutantsScilab pour les vrais débutants
Scilab pour les vrais débutantsScilab
 
Projet base de donnée
Projet base de donnée Projet base de donnée
Projet base de donnée MakremArfaoui2
 
S17 adressez vos besoins complexes de reporting avec db2 web query
S17   adressez vos besoins complexes de reporting avec db2 web queryS17   adressez vos besoins complexes de reporting avec db2 web query
S17 adressez vos besoins complexes de reporting avec db2 web queryGautier DUMAS
 
Excel ppt.ppt
Excel ppt.pptExcel ppt.ppt
Excel ppt.pptBadarSaf
 
Le microprocesseur
Le microprocesseurLe microprocesseur
Le microprocesseurmdiker
 
Cours BASE de DONNES.pdf
Cours BASE de DONNES.pdfCours BASE de DONNES.pdf
Cours BASE de DONNES.pdfManelHamdi7
 
Dimensionnement d’un Atelier et Équilibrages des Lignes.pptx
Dimensionnement d’un Atelier et Équilibrages des Lignes.pptxDimensionnement d’un Atelier et Équilibrages des Lignes.pptx
Dimensionnement d’un Atelier et Équilibrages des Lignes.pptxSalimAhmed96
 
Vbisigk
VbisigkVbisigk
VbisigkISIG
 
Jet Reports Pour Microsoft Dynamics NAV
Jet Reports Pour Microsoft Dynamics NAVJet Reports Pour Microsoft Dynamics NAV
Jet Reports Pour Microsoft Dynamics NAVMaroua Bouhachem
 

Similaire à Atelier2 (20)

js---Partie1----.pdf
js---Partie1----.pdfjs---Partie1----.pdf
js---Partie1----.pdf
 
Examen de passage TDI - Synthèse V1 - 2015
Examen de passage TDI - Synthèse V1 - 2015Examen de passage TDI - Synthèse V1 - 2015
Examen de passage TDI - Synthèse V1 - 2015
 
1 tdi synthese_principale_v2_2015.docx
1 tdi synthese_principale_v2_2015.docx1 tdi synthese_principale_v2_2015.docx
1 tdi synthese_principale_v2_2015.docx
 
Examen de-passage-developpement-informatiques-tsdi-2015-synthese-variante-1-o...
Examen de-passage-developpement-informatiques-tsdi-2015-synthese-variante-1-o...Examen de-passage-developpement-informatiques-tsdi-2015-synthese-variante-1-o...
Examen de-passage-developpement-informatiques-tsdi-2015-synthese-variante-1-o...
 
passage tdi 2015 v1
passage tdi 2015 v1passage tdi 2015 v1
passage tdi 2015 v1
 
Examen de-passage-developpement-informatiques-tsdi-2015-synthese-variante-2-o...
Examen de-passage-developpement-informatiques-tsdi-2015-synthese-variante-2-o...Examen de-passage-developpement-informatiques-tsdi-2015-synthese-variante-2-o...
Examen de-passage-developpement-informatiques-tsdi-2015-synthese-variante-2-o...
 
Epreuve concours génie informatique
Epreuve concours génie informatiqueEpreuve concours génie informatique
Epreuve concours génie informatique
 
Projet BI - 2 - Conception base de données
Projet BI - 2 - Conception base de donnéesProjet BI - 2 - Conception base de données
Projet BI - 2 - Conception base de données
 
1-pl-sql 2021 2022.pdf
1-pl-sql 2021 2022.pdf1-pl-sql 2021 2022.pdf
1-pl-sql 2021 2022.pdf
 
Tp1 matlab
Tp1 matlab Tp1 matlab
Tp1 matlab
 
Jp perez correction quizz oracle mairie de paris acma 2007 2008
Jp perez correction quizz oracle mairie de paris acma 2007 2008Jp perez correction quizz oracle mairie de paris acma 2007 2008
Jp perez correction quizz oracle mairie de paris acma 2007 2008
 
Scilab pour les vrais débutants
Scilab pour les vrais débutantsScilab pour les vrais débutants
Scilab pour les vrais débutants
 
Projet base de donnée
Projet base de donnée Projet base de donnée
Projet base de donnée
 
S17 adressez vos besoins complexes de reporting avec db2 web query
S17   adressez vos besoins complexes de reporting avec db2 web queryS17   adressez vos besoins complexes de reporting avec db2 web query
S17 adressez vos besoins complexes de reporting avec db2 web query
 
Excel ppt.ppt
Excel ppt.pptExcel ppt.ppt
Excel ppt.ppt
 
Le microprocesseur
Le microprocesseurLe microprocesseur
Le microprocesseur
 
Cours BASE de DONNES.pdf
Cours BASE de DONNES.pdfCours BASE de DONNES.pdf
Cours BASE de DONNES.pdf
 
Dimensionnement d’un Atelier et Équilibrages des Lignes.pptx
Dimensionnement d’un Atelier et Équilibrages des Lignes.pptxDimensionnement d’un Atelier et Équilibrages des Lignes.pptx
Dimensionnement d’un Atelier et Équilibrages des Lignes.pptx
 
Vbisigk
VbisigkVbisigk
Vbisigk
 
Jet Reports Pour Microsoft Dynamics NAV
Jet Reports Pour Microsoft Dynamics NAVJet Reports Pour Microsoft Dynamics NAV
Jet Reports Pour Microsoft Dynamics NAV
 

Atelier2

  • 1. Langage PL/SQL Langage PL/SQL Atelier 2 Exercice 1 On souhaite conserver des statistiques concernant les mises à jour (insertion, modifications, suppression) sur la table Emp. Ces statistiques seront enregistrées dans une table appelée 'Stats' ayant la structure suivante : TypeMAJ NbMAJ DateMAJ Insert 0 NULL Update 0 NULL Delete 0 NULL Etapes à 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 EMP Exercice 2 Soit 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 table Commandes) capable de récupérer les tuples effacés dans la table commandes. Ecrire le trigger qui automatise cette journalisation. Ce trigger permettra entre autre de : - 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 3 Le but de ce problème est de faire des statistiques concernant les transactions effectuées par les clients d’une banque donnée. Pour cela on considère les tables suivantes :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. 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 Stats Exercice 4 Le but est de faire la gestion des emprunts d'une bibliothèque. Pour cela, on considè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ées Règles de gestion • NumE doit être attribué automatiquement de la forme 100, 200, 300, … • Un adhérent ne peut emprunter un ouvrage que s'il est disponible, mais ne peut en emprunter plus que 5 ouvrages. • Après chaque emprunt, on doit mettre à jour le nombre d'exemplaires disponibles Travail à faire 1- écrire le ou les déclencheur(s) pour gérer les emprunts des ouvrages 2- écrire un bloc permettant d'afficher 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 s'est effectué pendant ce mois à l'aide d'une exception Exercice 5 L'idée est de mettre à jour la quantité en stock après chaque opération d'entrée/sortie. Pour cela, on considère les tables suivantes : PRODUITS Ref Des PU Qtes SeuilMax SeuilMin 1 2 3 4 1 N°Adhérent 2 Nombre d'exemplaires 3 N°d'emprunt 4 Date d'emprunt abdellah_madani@yahoo.fr 2
  • 3. Langage PL/SQL Detail_Clients NBC Ref QteC Detail_Fournisseurs NBC Ref QteC Indications • La tables 'Produits' doit être alimentée par des articles. • A chaque opération d'entrée/sortie, modifier la quantité en stock. Il faut respecter les seuils maximal et minimal de chaque produit. Exercice 6 Une banque désire connaître le nombre de transactions effectuées par chacun de ses clients à chaque opération de dépôt ou de retrait. A partir de la table transactions(DateT, NCompte, Montant, TypeT) (où TypeT : D pour dépôt, R pour chaque retrait), on veut mettre à jour la table clients(NCompte, Nom, Solde) et la table 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 transactions Indications • 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 vide Exercice 2 create table articles( ref integer primary key, des varchar(30), pu float, qtes integer, coul varchar(20) ); abdellah_madani@yahoo.fr 3
  • 4. Langage PL/SQL create 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 structure que la table -- commandes create table jour_commandes1 as select *from commandes abdellah_madani@yahoo.fr 4
  • 5. Langage PL/SQL where nbc=-1; create table jour_commandes2 as select *from commandes; delete from jour_commandes2; -- Ecrire un déclencheur pour enregistrer les commandes supprimés -- (de la table commandes) dans la table jour_commandes1 create or replace trigger tr1 after delete on commandes for each row begin insert into jour_commandes1 values (:old.nbc,:old.datec,:old.code); end; --Journaliser dans la table jou_commandes les commandes qui --ont toutes les QTEL<>0 et que tous les produits ont une couleur --NOIR create or replace trigger tr1 after delete on commandes for each row declare vmin integer; nbre intreger; begin select min(qteL) into vmin from details where nbc=:old.nbc; select count(*) into nbre from details, articles where details.ref=articles.ref and coul<>'Noir' and nbc=: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. Langage PL/SQL end if; end; Exercice 3 On 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 est toujours -- considérée comme un enregistrement même si le curseur -- retourne un seul champs Declare Cursor c is select ncompte from compte ; Begin For x in c loop Insert 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. Langage PL/SQL End; 4/ Create or replace trigger tr1 after insert on retraits For each row Declare Vsolde compte.solde%type; Begin Select solde into vsolde from compte where 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