Base de donees
Curseurs: A?chage d’informations
Feuille de TD4 Bases de donn´es relationnelles e langage PL/SQL R.Chiky, Z. Kazi Aoul, M. Manceny
14 avril 2010
Nous rappelons ici le sch´ma de la base dedonn´es impl´ment´e en TP: e e e e
Ecrivez un bloc PL/SQL qui permet de connaˆ ?tre les cinq ouvrages les plus emprunt´s. L’utilisateur verra a?ch´: e e Numero Numero Numero Numero Numero 1: 2: 3: 4: 5:isbn isbn isbn isbn isbn : : : : : 126578753 676809876 987654398 876098790 546782333
1.1
Correction
DECLARE CURSOR couvrages IS SELECT isbn, count(*) AS NombreEmprunts FROM details GROUP BYisbn ORDER BY 2 DESC; vouvrage couvrages%rowtype; i number; BEGIN OPEN couvrages; i:=0; LOOP i:=i+1; EXIT WHEN i>5; FETCH couvrages INTO vouvrage; EXIT WHEN couvrages%notfound;DBMS_OUTPUT.PUT_LINE(’Numero: ’||i||’ isbn:’ || vouvrage.isbn); END LOOP; CLOSE couvrages; END; /
2
Fonctions: Dur´e moyenne e
Figure 1: Sch´ma de la base de donn´es e e A partir de ce sch´ma, r´pondez auxexercices PL/SQL suivants: e e
Ecrivez une fonction dureeMoyenne qui accepte en param`tre un num´ro e e d’ISBN et ´ventuellement un num´ro d’exemplaire et qui retourne, soit la dur´e e e e moyenned’emprunt de l’ouvrage (seul le num´ro d’ISBN est connu), soit la e dur´e moyenne d’emprunt de l’exemplaire dans le cas o` l’on connait la num´ro e u e d’ISBN et le num´ro d’exemplaire. e
2.1Correction
CREATE OR REPLACE FUNCTION dureeMoyenne( 1 2
visbn in number, vexemplaire in number default null) RETURN number IS vduree number; BEGIN IF (vexemplaire is null) THEN SELECTAVG(rendule-creele) INTO vduree FROM emprunts, details WHERE emprunts.numero=details.emprunt AND details.isbn=visbn AND rendule is not null; ELSE SELECT AVG(rendule-creele) INTO vduree FROM emprunts, details WHEREemprunts.numero=details.emprunt AND details.isbn=visbn AND details.exemplaire=vexemplaire AND rendule is not null; END IF; RETURN vduree; END; /
WHERE isbn=visbn AND exemplaire=vnumero ; IF…